1. 程式人生 > >C/C++ -- 插入排序算法

C/C++ -- 插入排序算法

width void 依次 git 交換 strong tar log IV

索引:

開源Spring解決方案--lm.solution

參看代碼 GitHub:

Sort.cpp

代碼簡要分析說明:

  1.for(int i=1;i<nSize;i++)

    這個外層的for循環, [0][1],[1][2],[2][3]... 這樣的順序讓內層循壞開始索引遞減比較,保證每對開頭

    的內層循壞排序前,前面的都是排序好的

  2.while (tmp<ary[n]) ... n-- ...

    這個內層的while循環,使外層的每對開頭的循環開始,若比較後大小為真,則換位, n-- 保證了 第 n+1 位也就是 i 索引對應

     的值始終可以排到正確的位置

  3.運行環境

    Visual C++ 2008 IDE 環境, 建議實際跑一下並調試一下,結果如下:

   技術分享圖片

  4.代碼:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 // 定義函數 -- 插入排序算法
 6 void Sort(int* ary,int nSize)
 7 {
 8     /*
 9     * 循環元素,動態理解:
10     * arr[1] 與 arr[0] 比較
11     * arr[2] 與 arr[1],arr[0] 比較
12 * arr[3] 與 arr[2],arr[1],arr[0] 比較 13 * 等等 依次類推 14 */ 15 for(int i=1;i<nSize;i++) 16 { 17 int tmp=ary[i]; 18 int n=i-1; 19 20 // 若後位元素小於前位元素則交換位置 21 while (tmp<ary[n]) 22 { 23 ary[n+1]=ary[n]; 24 25 //
元素為動態遞減 26 n--; 27 28 // 到第一位元素後,無前位元素,跳出 29 if(n==-1) 30 { 31 break; 32 } 33 } 34 35 ary[n+1]=tmp; 36 } 37 } 38 39 int main(int argc, char* argv[]) 40 { 41 // 需要排序的數組 42 int numArray[]={12,31,5,87,1,56}; 43 int nLength=sizeof(numArray)/sizeof(int); 44 45 // 排序 46 Sort(numArray,nLength); 47 48 // 顯示排序後的結果 49 for(int k=0;k<nLength;k++) 50 { 51 cout<<numArray[k]<<","; 52 } 53 cout<<endl; 54 55 // 退出 56 return 0; 57 }

                                         蒙

                                    2018-06-12 21:50 周二

C/C++ -- 插入排序算法