选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
算法步骤
1 依次遍历数列的无序部分(第一次认为整个数列都为无序)
2 找出最小(或最大)的一个元素
3 将找出来的最小元素与无序数列第一个元素交换,使得无序数列的第一个元素也变成有序数列
4 重复上述步骤,直到无序数列中剩下一个元素为止
C语言示例
示例中array为数组指针,first为排序起始编号,last为排序结束编号,selection_sort函数完成从first开始,到last结束区间内的数据的排序。
#include <stdio.h>
void print_array(int *array, int length)
{
int i = 0;
while(i < length)
printf("%d ", array[i++]);
printf("\n");
}
void selection_sort(int *array,unsigned int first,unsigned int last)
{
unsigned int i = first, j = 0, k = 0;
int temp;
for( i = first; i <= last - 1; i++)
{
for(j = i+1,k = i; j <= last; j++)
{
//寻找最小元素的下标
if(array[j] < array[k])
k = j;
}
//将最小的元素插入到有序数列最后
temp = array[i];
array[i] = array[k];
array[k] = temp;
}
}
int main(void)
{
int array[10] = {4,1,7,8,5,3,9,5,6,3};
printf("before selection_sort: ");
print_array(array,10);
selection_sort(array, 0, 9);
printf(" after selection_sort: ");
print_array(array,10);
getchar();
return 0;
}
运行结果如下: