选择排序
参考:
《linux c编程一站式学习》的习题11.1
思想:
第一次从数组a[0,...,LEN-1]中找出最小元素交换到a[0]的位置,第二次从数组a[1,...,LEN-1]中找出最小元素交换到a[1]的位置,依次类推。
code:
1 #include <stdio.h> 2 3 #define LEN 5 4 5 int testData[LEN] = {10, 5, 2, 4, 7}; 6 7 void swap(int *a, int *b) 8 {//交换 9 int temp; 10 temp = *a; 11 *a = *b; 12 *b = temp; 13 } 14 15 void select_sort(void) 16 {//从小到大排序,下标0的位置保存最小值 17 int i, j; 18 int min_val; //保存最小值 19 int min_num; //保存最小值的下标 20 for(i=0; i<LEN-1; i++){ 21 printf("%d, %d, %d, %d, %d\n", testData[0], testData[1], testData[2], testData[3], testData[4]); 22 min_val = testData[i]; 23 min_num = i; 24 for(j=i+1; j<LEN; j++){ //求取剩余数字的最小值 25 if(min_val > testData[j]){ 26 min_val = testData[j]; 27 min_num = j; 28 } 29 } 30 if(min_num != i){//最小值不在当前位置,需要交换 31 swap(&testData[i], &testData[min_num]); 32 } 33 } 34 printf("%d, %d, %d, %d, %d\n", testData[0], testData[1], testData[2], testData[3], testData[4]); 35 } 36 37 int main(int argc, char *argv[]) 38 { 39 select_sort(); 40 return 0; 41 }
截图: