演算法導論中插入排序的個人理解

2021-09-24 22:49:53 字數 2103 閱讀 5312

演算法導論中插入排序的個人理解(演算法導論第10頁),偽**如下:

偽**執行步驟:

第1行:for迴圈:從a陣列的第二個數一直插入,直到a陣列的最後乙個數(j表示當前時陣列的第幾個數)

第2行:將陣列的當前值賦給key

第4行:i為j的值-1,(a[i]即陣列的第j-1個數)

第5、6、7行:當i>0而且陣列的第j-1的數值大於陣列的j個數時:

將a的第j-1的數值賦值到a的第j個位置,將i-1,繼續迴圈

當i>0或者陣列的第j-1個數《陣列的第j個數時,退出迴圈

第8行:將a陣列的第j個數賦值到第i+1(注意i的值在迴圈中不斷變化)的位置

以下以a=<5,2,4,6,1,3>為例子,進行講解(其中a[1]=5,a[2]=2,a[3]=4,a[4]=6,a[5]=1)

/第一次for迴圈/

1:開始for迴圈,此時j為2

2:key=a[2]

//此時key為2,將原本a[2]的值存給key

4:i=j-1

//i為 1

5:i >0 而且 a[i] > key,執行6,7行**

6:a[2] = a[1]

//a[2]位置的值已發生變化

7: i減1後變為0,跳到第五行

5:此時i=0,跳出迴圈,執行8行**

8:a[1]= key

//即將原本a[2]的值付給a[1]

/第二次for迴圈/

1:開始for迴圈,此時j為3

2:key=a[3]

//此時key為4,將原本a[3]的值存給key

4:i=j-1 //(i為 2)

5:i >0 而且 a[i] > key,執行6,7行**

//因為a[2]=5,key=4

6:a[3] = a[2]

//a[2]位置的值已發生變化

7: i減1後變為1,跳到第五行

5:此時i>0,但是 a[i] < key,執行8行**

//因為a[1]=2,key=4

8:a[2]= key

//即將原本a[3]的值付給a[2]

/第三次for迴圈/

1:開始for迴圈,此時j為4

2:key=a[4]

//此時key為6,將原本a[4]的值存給key

4:i=j-1

//i為 3

5:i >0 但是 a[i] < key,執行8行**

//因為a[2]=5,key=6

8:a[4]= key

//將key的值付給a[4]

/第四次for迴圈/

1:開始for迴圈,此時j為5

2:key=a[5]

//此時key為1,將原本a[5]的值存給key

4:i=j-1 //(i為 4)

5:i >0 而且 a[i] > key,執行6,7行**

//因為a[2]=5,key=1

6:a[5] = a[4]

//a[5]位置的值已發生變化

7: i減1後變為3,跳到第五行

5:此時i>0,而且 a[i] > key,執行6,7行**

//因為a[3]=2,key=1

6:a[4] = a[3]

//a[4]位置的值已發生變化

7: i減1後變為2,跳到第五行

//即將原本a[3]的值付給a[2]

5:此時i>0,而且 a[i] > key,執行6,7行**

//因為a[2]=4,key=1

6:a[3] = a[2]

//a[3]位置的值已發生變化

7: i減1後變為1,跳到第五行

//即將原本a[3]的值付給a[2]

5:此時i>0,而且 a[i] > key,執行6,7行**

//因為a[1]=2,key=1

6:a[2] = a[1]

//a[3]位置的值已發生變化

7: i減1後變為0,跳到第五行

5:此時i=0,跳出迴圈,執行8行**

8:a[1]= key

//即將原本a[5]的值付給a[1]

演算法導論 插入排序

introduction to algorithms second edition chapter2,insertion sort date 2014 9 14 include include include define max 50 typedef struct sortarr 直接插入排序 i...

演算法導論 插入排序

插入排序應該算是比較好理解的一種了,原理類似於我們打牌的時候,摸牌插入手中的情景。來看一下圖,立刻就明白了 我們將乙個陣列int a 12 看做一副撲克牌,假設陣列有12個數,那麼撲克牌也一共有十二張,放在一起開始 我們先抽一張拿到手上,這時候,我們不需要排序,因為不論哪一張先被我們抽上來,不論大小...

演算法導論 插入排序

對於只有乙個元素的陣列,本身為已序。對於兩個元素的a,認為 a0 為已序,a1為key 若key a0 則將key 放到a0後。若不是,後移a0 對於多個元素的陣列 考慮將key 插入到已序的 a0 aj a0 a1 a2.中,可以將key 與aj a0 逐個比較,並後移,直到遇到乙個比key 小的...