浅谈选择排序
今天来谈谈选择排序{:10_327:},选择排序就是重复“从待排序数据中寻找最小值,将其与序列最左边的数字进行交换”比如有六个数{:10_256:} :6,1,7,8,9,3。第一次在这六个数中寻找出最小值,于是我们找到了1,将最小值与序列最左边的6进行交换,最小值1归位,此时序列变为1,6,7,8,9,3(见图1)。不过最小值已经在左边了,接下来就不需要任何操作了。 第二次在余下的数据中(即:6,7,8,9,3)寻找最小值,于是我们又找到了3{:10_254:}。将数字3与左边第二个数字6进行交换,最小值3归位,此时序列变为1,3,7,8,9,6。 如此进行五次排序得到1-3-6-7-8-9。
按此规律寻找下去可以知道:对6个数需要进行5次排序,在第一次排序中需要比较5次,第二次排序中需要比较4次。
那么对n个数进行排序:对n个数需要进行n-1次排序,在第一次排序中需要比较n-1次,在第j次排序中需要比较n-j次。
例子(和上面稍稍不同哟{:10_335:},寻找的是最大值,并放到最后面)
#include <stdio.h>
int compare(int a[],int length); //定义函数用来从数组中找出最大值 。
int compare(int a[],int length)
{
int i,max=0;
for(i=1;i<length;i++)
{
if(a>a)
{
max=i;
}
}
return max; //返回最大值的序号。
}
int main()
{
int a,i,j,temp;
printf("please enter ten numbers:");
for (i=0;i<10;i++)
{
scanf("%d",&a);
}
for(i=0;i<9;i++)
{
j=compare(a,10-i); //将最大值的序号赋值给j。
temp=a;
a=a;
a=temp; //将最大值放到最后的位置
}
printf("the result is:");
for(i=0;i<10;i++)
{
printf(" %2d ",a);
}
return 0;
}{:10_334:}
唉!马上就要开学了,自学编程的时间越来越少了,不过还要加油啊{:10_265:}
{:10_256:}
{:5_95:} 不是开学3周了吗 Minecraft程序猿 发表于 2021-3-18 21:49
不是开学3周了吗
河北还没开学,在家网课 无情的心 发表于 2021-3-18 21:52
河北还没开学,在家网课
哦,山东的初中早开学了...呜呜...
页:
[1]