选择法的算法:
假设对10个数进行排序,首先找出10个数中的最小数,并和这个10个数的第一个数(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大)……
假设对10个数进行排序,首先找出10个数中的最小数,并和这个10个数的第一个数(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大)……
依次类推,当还剩两个数时,选出两个数的最小者放在第9个位置(下标8),于是就只剩下一个数了。这个数已经在最后一位(下标9),不用再选择了。所以10个数排序,一共需要选择9次(n个数排序就需要选择n-1次)。
<span style="font-size:18px;">
#include<stdio.h>
int main()
{
int a[]={1,3,5,4,11,2,7};
int i,j,k,t,n;
n=7;
for(i=0;i<n-1;i++) //一共需要n-1趟
{
k=i; //假定当前下标代表的元素最小
for(j=i+1;j<n;j++)
{
if(a[k]>a[j])//如果把>改成<就是从大到小排序了
k=j; //这个for循环是找出剩余数中的最小值
}
if(k!=i) //若k与i不同了,则要交换a[k]与a[i]
{t=a[k];a[k]=a[i];a[i]=t;}
}
for(i=0;i<7;i++)
printf("%d ",a[i]);
return 0;
}
</span>
注意,虽然以下写法也能排序一样,但是存在效率低的问题
#include<stdio.h>
int main()
{
int a[]={1,3,5,4,11,2,7};
int i,j,t,n;
n=7;
for(i=0;i<n-1;i++) //一共需要n-1趟
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])//如果把>改成<就是从大到小排序了
{t=a[j];a[j]=a[i];a[i]=t;}
}
}
for(i=0;i<7;i++)
printf("%d ",a[i]);
return 0;
}