例8.13 用选择法对数组中10个整数按由小到大排序。所谓选择法就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。
下面以5个数为例说明选择法的步骤。
a[0] a[1] a[2] a[3] a[4]
3 6 1 9 4 未排序时的情况
1 6 3 9 4 将5个数中最小的数1与a[0]对换
1 36 9 4 将余下的4个数中最小的数3与a[1]对换
1 3 4 9 6 将余下的3个数中最小的数4与a[2]对换
1 3 4 6 9 将余下的2个数中最小的数6与a[3]对换,至此完成排序根据此思路编写程序如下:
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];arra
y[i]=t;}
}
main()
{int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array∶\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
可以看到在执行函数调用语句sort(a,10);之前和之后,a数组中各元素的值是不同的。原来是无序的,执行sort(a,10);后,a数组已经排好序了,这是由于形参数组array已用选择法进行排序了,形参数组改变也使实参数组随之改变。
下面以5个数为例说明选择法的步骤。
a[0] a[1] a[2] a[3] a[4]
3 6 1 9 4 未排序时的情况
1 6 3 9 4 将5个数中最小的数1与a[0]对换
1 36 9 4 将余下的4个数中最小的数3与a[1]对换
1 3 4 9 6 将余下的3个数中最小的数4与a[2]对换
1 3 4 6 9 将余下的2个数中最小的数6与a[3]对换,至此完成排序根据此思路编写程序如下:
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];arra
y[i]=t;}
}
main()
{int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array∶\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
可以看到在执行函数调用语句sort(a,10);之前和之后,a数组中各元素的值是不同的。原来是无序的,执行sort(a,10);后,a数组已经排好序了,这是由于形参数组array已用选择法进行排序了,形参数组改变也使实参数组随之改变。