insertsort(int a[],int n) /*直接插入排序*/ { int i,j; for(i=2;i<=n;i++) { a[0] = a[i]; j = i - 1; while(j>0 && a[0]>a[j]) /*改變判斷條件,實現從大到小地排列*/ a[j+1] = a[j--]; a[j+1] = a[0]; /*將元素a[0]插入指定位置*/ } } void selectsort(int k[],int n) /*選擇排序*/ { int i,j,max; for(i=1;i<=n-1;i++){ max = i; for(j=i+1;j<=n;j++) /*在後n-i+1個元素中找到最小的元素位置*/ if(k[j] > k[max]) max = j; /*用min記錄下最小元素的位置*/ if(max != i){ /*若是最小的元素不位於後n-i+1個元素檔第1個*/ k[0] = k[max] ; k[max] = k[i]; /*元素的交換*/ k[i] = k[0]; } } } void bubblesort(int k[],int n){ /*冒泡排序*/ int i,j,tmp ,flag = 1; for(i=1;i<=n-1 && flag == 1;i++){ /*執行n-1趟排序*/ flag = 0; for(j=1;j<=n-i;j++){ if(k[j]<k[j+1]){ /*數據交換*/ tmp = k[j+1]; k[j+1] = k[j]; k[j] = tmp; flag = 1; } } } } void shellsort(int k[],int n) /*希爾排序*/ { int i, j, flag ,gap = n; int tmp; while(gap > 1){ gap = gap/2; /*增量縮小,每次減半*/ do{ /*子序列應用冒泡排序*/ flag = 0; for(i=1;i<=n-gap;i++){ j = i + gap; if(k[i]<k[j]){ tmp = k[i]; k[i] = k[j]; k[j] = tmp; flag = 1; } } }while(flag !=0); } }
摘自:開源中國shell