選擇排序法
選擇排序法也算是枚舉法的應用,就是反複從未排序的數列中取出最小的元素,加入到另一個數列中,最後的結果即為已排序的數列。選擇排序法可使用兩種方式排序,即在所有的資料中,若從大到小排序,則将最大值放入第一個位置;若從小到大排序,則将最大值放入最後一個位置。例如,一開始在所有資料中挑選一個最小項放在第一個位置(假設是從小到大排序),再從第二項開始挑選一個最小項放在第二個位置,以此重複,直到完成排序為止。
示範
原始值: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");
}