选择法排序是一种简单易实现的数据排序法,设有数组A[10],其算法原理为:首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准从A[0],…,A[9]中找出最小的元素,将其与A[0]交换;然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换;一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,完成排序)。以下为一个用C描述的函数实现上述排序:
#include<stdio.h>
#define LEN 10
void sort(int array[],int n);
void oppsort(int array[],int n);
int main()
{
int i;
int array1[LEN]={0};
int array2[LEN]={0};
for(i=0;i<LEN;i++){
scanf("%d",&array1[i]);
array2[i]=array1[i];}
printf("array1:");
for(i=0;i<LEN;i++)
printf("%d ",array1[i]);
putchar('\n');
printf("array2:");
for(i=0;i<LEN;i++)
printf("%d ",array2[i]);
sort(array1,LEN);
oppsort(array2,LEN);
putchar('\n');
printf("array1:");
for(i=0;i<LEN;i++)
printf("%6d",array1[i]);
putchar('\n');
printf("array2:");
for(i=0;i<LEN;i++)
printf("%6d",array2[i]);
return 0;
}
void sort(int array[],int n)
{
int i,j,k,temp;// i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较小的元素的位置
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(array[j]<array[k])
k=j;
}
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
void oppsort(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(array[j]>array[k])
k=j;
}
temp=array[i];
array[i]=array[k];
array[k]=temp;}
}