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

索引:html

目錄索引ios

參看代碼 GitHub:git

Sort.cppgithub

代碼簡要分析說明:算法

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

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

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

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

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

     的值始終能夠排到正確的位置

  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 週二

相關文章
相關標籤/搜索