选择排序
在这里,贴出选择排序源码,以期大神能指出问题所在,在两个排序中,得到的不是预期结果。
1 #include "stdio.h" 2 /********************************* 3 选择排序降序 4 ***********************************/ 5 void selectsort(int k[],int n) 6 { 7 int i,j,max; 8 for(i=1;i<=n-1;i++) 9 { 10 max=i; 11 for(j=i+1;j<=n;j++) 12 {//在后n-i+1个元素中找到最大的元素位置 13 if(k[j]>k[max]) 14 { 15 //用max记录最大元素的位置 16 max=j; 17 } 18 //如果最大的元素不位于后n-i+1个元素档第1个 19 if(max!=i) 20 {//元素的交换 21 k[0]=k[max]; 22 k[max]=k[i]; 23 k[i]=k[0]; 24 } 25 } 26 } 27 printf("\nThe result of selection descending order for the array is\n"); 28 //输出排序后的结果 29 for(i=1;i<=n;i++) 30 { 31 printf("%d ",k[i]); 32 } 33 printf("\n"); 34 } 35 36 /********************************* 37 选择排序升序 38 ***********************************/ 39 void select_sort(int k[],int n) 40 { 41 int i,j,min; 42 for(i=1;i<=n-1;i++) 43 { 44 min=i; 45 for(j=i+1;j<=n;j++) 46 {//在后n-i+1个元素中找到最小的元素位置 47 if(k[j]<k[min]) 48 { 49 //用max记录最小元素的位置 50 min=j; 51 } 52 //如果最小的元素不位于后n-i+1个元素档第1个 53 if(min!=i) 54 {//元素的交换 55 k[0]=k[min]; 56 k[min]=k[i]; 57 k[i]=k[0]; 58 } 59 } 60 } 61 printf("\nThe result of selection ascending order for the array is\n"); 62 //输出排序后的结果 63 for(i=1;i<=n;i++) 64 { 65 printf("%d ",k[i]); 66 } 67 printf("\n"); 68 } 69 70 /********************************** 71 程序入口 72 ***********************************/ 73 main() 74 { 75 //初始化序列,a[0]可任意置数 76 int i,a[11]={-111,2,5,6,3,7,8,9,0,12,1}; 77 printf("The orginal data array is\n"); 78 //显示原序列中的元素 79 for(i=1;i<=10;i++) 80 { 81 printf("%d ",a[i]); 82 } 83 //执行选择排序 84 selectsort(a,10); 85 select_sort(a,10); 86 }