排序演算法 插入排序(3種)

2021-08-11 01:34:34 字數 1172 閱讀 4353

1.直接插入排序

【思想】利用有序表的插入操作進行排序

有序表的插入:將乙個記錄插入到已排好序的有序表中,從而得到乙個新的有序表

【特點】穩定

空間代價:o(1)  時間代價:o(n^2)

1

void insertsort (int array, intn)2

16//

此時j後面就是記錄i的正確位置,回填

17 array[j + 1] =temprecord;18}

19 }

2.折半插入排序

【思想】

·在插入第i個記錄時,前面的記錄已經是有序的了

·可以用二分法查詢第i個記錄的正確位置

由於直接插入排序演算法利用了有序表的插入操作,故將順序查詢替換為二分法查詢即可

【特點】穩定

空間代價:o(1)  時間代價:o(n^2)

1

void binaryinsertsort(int r,intn)2

15//

此時left處應為要插入的位置

16for(int j = i - 1; j >= left; j --)

17 r[j + 1] = r[j]; //

元素後移空出插入位

18 r[left] =temp;19}

20 }

3.希爾排序

【思想】

·先將序列轉化為若干小序列,在這些小序列內進行插入排序

·逐漸擴大小序列的規模,而減少小序列的個數,使得待排序序列逐漸處於更有序的狀態

·最後對整個序列進行掃尾直接插入排序,從而完成排序

【特點】不穩定

空間代價:o(1)  時間代價:在o(logn)~o(n^2)之間,大致o(n^1.3)

1 template 

2void shellsort (t vector, int

arrsize)

318 vector[j] =temp;19}

20 gap = gap / 2;//

步長每次縮短為原來的一半21}

22 }

排序演算法3 插入排序

插入排序 insertion sort 通過對未排序的元素逐個插入已排序的合適的位置而完成排序工作,其排序流程如下 1.對陣列的前兩個元素進行排序。2.將第三個元素和前兩個已經排好序的元素進行比較,並且插入到合適的位置。3.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排...

排序演算法3 插入排序

該演算法維護乙個有序序列,然後把無序序列中的元素,在有序序列中從後往前進行掃瞄,找到位置後插入。從乙個元素開始,該元素可以認為已經被排序好的。在有序序列從後往前掃瞄的過程中,也要將已排序的元素逐個後移,為新插入的元素提供位置 插入排序 public class insertsort for int ...

排序演算法總結(3) 插入排序

插入排序是區域性有序的,陣列中有乙個元素被作為標記元素,標記元素的左側是有序的,右側是無序的,即標記元素是無序部分的第乙個元素。此時要求被標記元素出列,且和有序部分的第乙個元素進行比較,若標記元素小於有序部分的最大元素,則最大元素右移到標記元素的位置,標記元素和次大元素繼續比較,直到標記元素大於有序...