选择排序法
选择排序法也算是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入到另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从大到小排序,则将最大值放入第一个位置;若从小到大排序,则将最大值放入最后一个位置。例如,一开始在所有数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第二个位置,以此重复,直到完成排序为止。
演示
原始值:55,23,87,62,16
第一次扫描:先找到该数列中最小值,然后与数列中第一个元素交换
16,23,87,62,55
第二次扫描:从第二项开始查找,除第一项外找到此数列中的最小值,再与第二项元素交换位置
16,23,87,62,55
第三次扫描:从第三项开始查找
16,23,55,62,87
第四次扫描:从第四项开始查找
16,23,55,62,87
程序范例
#include<stdio.h>
#include<stdlib.h>
void select(int *);
void showdata(int *);
int main()
{
int data[8] = {55,23,87,62,16,34,65,25}
printf("before sort: ");
showdata(data);
printf("************************************");
select(data);
printf("after sort: ");
showdata(data);
return 0;
}
void showdata(int *)
{
int i;
for (i=0;i<8;i++)
printf("%3d",data[i]);
printf("\n");
}
void select(int *)
{
int i, j, tmp;
for(i=0;i<7;i++)
{
for(j=1;j<8;j++)
{
if(data[i]>data[j])
{
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
showdata(data);
}
printf("\n");
}
网友评论