|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天来谈谈选择排序 ,选择排序就是重复“从待排序数据中寻找最小值,将其与序列最左边的数字进行交换”
比如有六个数 :6,1,7,8,9,3。第一次在这六个数中寻找出最小值,于是我们找到了1,将最小值与序列最左边的6进行交换,最小值1归位,此时序列变为1,6,7,8,9,3(见图1)。不过最小值已经在左边了,接下来就不需要任何操作了。 第二次在余下的数据中(即:6,7,8,9,3)寻找最小值,于是我们又找到了3 。将数字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次。
例子(和上面稍稍不同哟 ,寻找的是最大值,并放到最后面)
#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[i]>a[max])
{
max=i;
}
}
return max; //返回最大值的序号。
}
int main()
{
int a[10],i,j,temp;
printf("please enter ten numbers:");
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
j=compare(a,10-i); //将最大值的序号赋值给j。
temp=a[j];
a[j]=a[9-i];
a[9-i]=temp; //将最大值放到最后的位置
}
printf("the result is:");
for(i=0;i<10;i++)
{
printf(" %2d ",a[i]);
}
return 0;
}
唉!马上就要开学了,自学编程的时间越来越少了,不过还要加油啊
|
|