三種簡單排序演算法實現:插入排序、選擇排序、冒泡排序。
系統內容:
[lanux@localhost--Debug--18:10]$uname -sr
Linux 2.6.34.7-61.fc13.i686.PAE
編譯器環境:
anjuta-2.30.2.1
1、插入排序:
/*對無序表插入排序,區間為【1,len】,<br />無序表長度為len+1,下為非遞減排序*/<br />int InsertSort( int *SqList, int len )<br />{<br />if( (len<0) || (SqList==NULL) )<br />return 0;<br />int i,j=0;<br />/*將一個元素插入已經有序的表中,為一趟插入排序*/<br />for( j=2; j<=len; j++ )<br />{<br />SqList[0]=SqList[j];//設定監哨位,同時作臨時儲存<br />for( i=j-1; SqList[0]<SqList[i]; i-- )<br />{<br />SqList[i+1]=SqList[i];//如果沒有找到位置,就後移<br />}//找到正確的位置為i+1<br />SqList[i+1]=SqList[0];//將SqList[j]插入i的後面<br />}//for<br />return 1;<br />}
插入排序結果:
[lanux@localhost--Debug--18:15]$./sort_testing
array number fallow as:
510 733 357 747 412 625 343 55 163 443
817 24 250 258 421 983 815 878 945 317
The insert sort follow:
24 55 163 250 258 317 343 357 412 421
443 510 625 733 747 815 817 878 945 983
+++++++++++++++++++++++++++++++++++++++
2、選擇排序:
/*對無序表選擇排序,區間為【1,len】,<br />無序表長度為len+1,下為非遞減排序*/<br />int SelectSort(int *SqList, int len)<br />{<br />int max=0;<br />int i=0;<br />int j=0;<br />if( (len<0) || (SqList==NULL) )<br />return 0;<br />/*一趟排序中選出最大的元素,將其放入已經有序的表中*/<br />for( j=len; j>1; j-- )<br />{<br />max=1;//max指向一趟排序中最大的數<br />for( i=2; i<=j; i++ )<br />{<br />if( SqList[max]<SqList[i] )<br />max=i;<br />}<br />/*把最大的數交換到最後一個*/<br />SqList[0]=SqList[j];<br />SqList[j]=SqList[max];<br />SqList[max]=SqList[0];<br />}<br />return 1;<br />}
選擇排序結果:
[lanux@localhost--Debug--18:15]$./sort_testing
array number fallow as:
436 597 903 999 281 806 504 456 538 851
236 332 931 908 249 37 568 292 9 502
The select sort follow:
9 37 236 249 281 292 332 436 456 502
504 538 568 597 806 851 903 908 931 999
+++++++++++++++++++++++++++++++++++++++
3、冒泡排序
/*對無序表冒泡排序,區間為【1,len】,<br />無序表長度為len+1,下為非遞減排序*/<br />int BubbleSort(int *SqList, int len)<br />{<br />if( (len<0) || (SqList==NULL) )<br />return 0;<br />int i=0;<br />int j=0;<br />/*冒泡是屬於交換排序,通過不斷地比較和交換,<br />得到最大或最小的冒出來,為一趟排序*/<br />for( j=len; j>0; j-- )<br />for( i=1; i<j; i++ )<br />{<br />/*如i比i+1的大,就交換,到最後一個冒出是最大的了*/<br />if( SqList[i+1]<=SqList[i] )<br />{<br />SqList[0]=SqList[i+1];<br />SqList[i+1]=SqList[i];<br />SqList[i]=SqList[0];<br />}<br />}<br />return 1;<br />}
冒泡排序結果:
[lanux@localhost--Debug--18:23]$./sort_testing
array number fallow as:
633 954 218 636 285 189 934 236 320 363
555 431 809 298 769 656 761 681 357 765
The bubble sort follow:
189 218 236 285 298 320 357 363 431 555
633 636 656 681 761 765 769 809 934 954
+++++++++++++++++++++++++++++++++++++++
2010-11-27 18:28:45