1.选择排序法

什么是选择排序呢?

通俗的来讲就是给定一个数组,将数组中​第一个元素和最小的元素进行位置互换,依次进行​直至没有比它大的数即可实现从小打到排序。

书本定义,选择排序法是指每次选择所要排序的数组中的最小值的数组元素,​将这个数组元素的值与前面没有进行排序的数组元素的值互换。l

​下面我们把数字 8,12 ,3,21,10,进行选择排序法:


元素【0】

元素【1】

元素【2】

元素【3】

元素【4】


初始值

8

12

3

21

10


第1次排序

3

12

8

21

10


第2次排序

3

8

12

21

10


第3次排序

3

8

10

21

12


第4次排序

3

8

10

12

21


排序结果

3

8

10

12

21


通过表格发现第一次排序:​是将第一个元素和最小元素的位置进行互换

      第二次排序:​是将第二个元素和剩下元素中最小的元素的位置进行互换

                    ……依次进行

代码实现:

#include <stdio.h>
int main()
{
int i, j = 0;
int arr[5];
int temp = 0;
int count = 0;
printf("为数组元素赋值:\n");

//从键盘为数组元素赋值

for (i = 0; i < 5; i++)
{
printf("a[%d]=", i);
scanf("%d", &arr[i]);
}
//从小到大排序

for (i = 0; i < 4; i++)
{
temp = arr[i];
count = i;
for (j = i + 1; j < 5; j++) //判断是否第一个元素比后面的元素小
{
if (arr[j] < temp)
{
temp = arr[j];
count = j;
}
}
//交换两个元素值
arr[count] = arr[i];
arr[i] = temp;
}
for (i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
if (2 == i)
{
printf("\n");
}
}
return 0;
}

程序运行结果为:

C语言学习--选择排序法,冒泡排序法_冒泡排序法

2.冒泡排序

什么是冒泡排序呢?

​通俗的讲,冒泡排序就是给定一个数组,将数组中的​相邻元素依次相比较,较小的数前,较大的数后。

​书本定义,冒泡排序指的是在排序时,每次比较数组中相邻的两个数组元素的值,将较小的数(从小到大)排在较大的书前面。

下面我们把数字 8,12 ,3,21,10,进行冒泡排序法


元素【0】

元素【1】

元素【2】

元素【3】

元素【4】


初始值

21

12

10

8

3


第1趟排序

12

21

10

8

3


第2趟排序

12

10

21

8

3


第3趟排序

12

10

8

21

3


第4趟排序

12

10

8

3

21


排序结果

12

10

8

3

21


注:一次只可以确定一个元素的顺序。


元素【0】

元素【1】

元素【2】

元素【3】

元素【4】


初始值

21

12

10

8

3


第1次排序

12

10

8

3

21


第2次排序

10

8

3

12

21


第3次排序

8

3

10

12

21


第4次排序

3

8

10

12

21


排序结果

3

8

10

12

21


代码1实现:

#include <stdio.h>
int main()
{
int i, j = 0;
int arr[5];
int temp = 0;
int count = 0;
printf("为数组元素赋值:\n");

//从键盘为数组元素赋值

for (i = 0; i < 5; i++)
{
printf("a[%d]=", i);
scanf("%d", &arr[i]);
}
//从小到大排序

for (i = 0; i < 5-1; i++)
{
for (j = 0; j < 5 - 1 - i;j++)
{
if (arr[j] >arr[j+1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}
for (i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
if (2 == i)
{
printf("\n");
}
}
return 0;
}

代码2实现:

#include <stdio.h>
int main()
{
int i, j = 0;
int arr[5];
int temp = 0;
printf("为数组元素赋值:\n");

//从键盘为数组元素赋值

for (i = 0; i < 5; i++)
{
printf("a[%d]=", i);
scanf("%d", &arr[i]);
}
//从小到大排序

for (i = 1; i < 5 ; i++)
{
for (j = 4; j >= i;j--)
{
if (arr[j] <arr[j - 1]) //如果前一个数大于后一个数
{
//交换两个数组元素的值
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
for (i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
if (2 == i)
{
printf("\n");
}
}
return 0;
}

程序运行结果为:

C语言学习--选择排序法,冒泡排序法_冒泡排序法