选择排序法
选择排序法也是c语言一种简单的排序方法,接下来我再用我自己的理解来解析一下易懂原理。
为了通俗易懂,继续给一个小的题目来讲解
就是从终端输入5个数,存进数组,然后我们用从小到大的顺序对这个数组进行排序,然后打印在终端。
首先,选择排序顾名思义,选择二字为核心。而且这种排序方法用一种是用每轮来假设一个下标(这里我们每轮假设一个下标min),然后向后一个个比较选择出本轮需要的下标成为这个min然后交换到自己排序目的的位置。
第一轮,我们先假设一个最小下标为min = 0;因此data[0]为本轮的最小值,然后我们就用data[0]和后面的data[1]、data[2]、data[3]、data[4],一个个进行比较哪个数小我们就把哪个数对应下标赋值给min,假如data[3]最小那么本轮的min = 3.一轮比较结束然后说明data[min]为这五个数里面的最小值,最后我们只需要我们将data[0]与data[min]换位即可。
第二轮,最小值在第一轮已经得出,放在data[0]的位置,那么我们现在第二轮就假设min= 1,继续重复第一轮的操作,得出后四个元素相对较小的一个数的下标min,另data[1]与data[min]交换。
第三轮,以此类推假设min = 2,第四轮,假设min = 3.我们会发现,在第四轮我们只需要选择一次,也就是只需要比较假设的min=3与4即可。
剖析图奉上
综上所述
我们5个数只进行了4轮 ,分别选择4次、3次、2次、1次 再交换
那么n个数进行n-1轮,分别进行n-1、n-2......2次、1次。 再交换
上代码
#include <stdio.h>
int main(void)
{
int data[5] = {0};//创建五个元素的数组,初始化
int i = 0;
int j = 0;
int len = sizeof(data) / sizeof(data[0]); //元素的个数在这里len = 5
int temp = 0;
int min = 0;//下标
for(i = 0; i < len ;i++)//循环5次,给数组接收五个随机数
{
scanf("%d",&data[i]);
}
printf("排序前: ");
for(i = 0;i < len;i++)
{
printf("%5d ",data[i]);
}
printf("\n");
/*进行选择排序*/
for(i = 0; i < len -1;i++) //len个数len-1轮
{
min = i; //每次选择比较前,假设一个最小值失的下标给min
for(j =i + 1;j < len ;j++)//选择
{
if(data[min] > data[j])
{
min = j;
}
}
temp = data [i];//交换
data[i] = data [min];
data[min] = temp;
}
printf("排序后: ");
for(i = 0;i < len;i++)
{
printf("%5d ",data[i]);
}
printf("\n");
return 0;
}
运行结果