选择排序的思路比较简单,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序虽然实现起来比较简单,但是效率也比较低, 为O(n2)。
C语言的代码实现如下 :
1 //选择排序的C语言实现 2 void selection_sort(int a[]) 3 { 4 int i , j; 5 int min = 0; 6 for(i=0; i<MAXSIZE-1; i++) 7 { 8 for(j=i; j<MAXSIZE; j++) 9 { 10 if(a[j] <= a[min]) { 11 min = j; 12 } 13 } 14 swap(a, i, min); 15 } 16 }
一个简单的测试用例:
#include<stdio.h> #define MAXSIZE 10 void selection_sort(int a[]); void swap(int a[], int i, int j); //选择排序的C语言实现 void selection_sort(int a[]) { int i , j; int min = 0; for(i=0; i<MAXSIZE-1; i++) { for(j=i; j<MAXSIZE; j++) { if(a[j] <= a[min]) { min = j; } } swap(a, i, min); } } void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } int main() { int a[MAXSIZE]; int i; printf("Please input the num: "); for(i=0; i<MAXSIZE; i++) { scanf("%d",&a[i]); } printf("before the sort: "); for(i=0; i<MAXSIZE; i++) { printf("%d ", a[i]); } printf(" "); selection_sort(a); printf("after the sort: "); for(i=0; i<MAXSIZE; i++) { printf("%d ", a[i]); } printf(" "); }