1 //选择排序(选择无序区最小值) 2 /**********算法描述*********************************** 3 //1、依次取无序区中的第一个元素array[i] i=0 to length,与后续元素中的最小值比较 4 //2、若比后续中的最小值大,则交换该值array[i]与最小值 5 //循环1: i++ 6 ******************************************************/ 7 void sortBySelect(int array[],int length) 8 { 9 int iMinIndex;//保存后续无序区中最小值的下标 10 int iTemp; 11 //依次取无序区的第一个元素和后续的元素中的最小值比较 12 for(int i=0;i<length;i++) 13 { 14 //取后续元素中的最小值的下标 15 for(int j=i+1;j<length;j++) 16 { 17 //j第一次循环,首先假定后续第一个元素为最小值 18 if(j == i+1) 19 { 20 iMinIndex = j;//每次假设第一个值就是最小的 21 } 22 if(array[iMinIndex] > array[j]) 23 { 24 iMinIndex = j; 25 } 26 } 27 //取值a[i],判断该值是否比上面取得的最小值大,大则交换该值 28 if(array[i] > array[iMinIndex]) 29 { 30 iTemp = array[i]; 31 array[i] = array[iMinIndex]; 32 array[iMinIndex] = iTemp; 33 } 34 } 35 } 36 37 void print(int a[],int length) 38 { 39 for(int i=0;i<length;i++) 40 { 41 printf("%d ",a[i]); 42 } 43 printf("\n"); 44 } 45 46 int main() 47 { 48 int a[10] = {7,2,8,3,9,10,15,11,20,17}; 49 printf("选择排序:\n"); 50 sortBySelect(a,sizeof(a)/sizeof(int)); 51 print(a,sizeof(a)/sizeof(int)); 52 return 0; 53 }