1.直接插入排序
【思想】利用有序表的插入操作進行排序
有序表的插入:將乙個記錄插入到已排好序的有序表中,從而得到乙個新的有序表
【特點】穩定
空間代價:o(1) 時間代價:o(n^2)
1void insertsort (int array, intn)2
16//
此時j後面就是記錄i的正確位置,回填
17 array[j + 1] =temprecord;18}
19 }
2.折半插入排序
【思想】
·在插入第i個記錄時,前面的記錄已經是有序的了
·可以用二分法查詢第i個記錄的正確位置
由於直接插入排序演算法利用了有序表的插入操作,故將順序查詢替換為二分法查詢即可
【特點】穩定
空間代價:o(1) 時間代價:o(n^2)
1void 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 template2void 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) 插入排序
插入排序是區域性有序的,陣列中有乙個元素被作為標記元素,標記元素的左側是有序的,右側是無序的,即標記元素是無序部分的第乙個元素。此時要求被標記元素出列,且和有序部分的第乙個元素進行比較,若標記元素小於有序部分的最大元素,則最大元素右移到標記元素的位置,標記元素和次大元素繼續比較,直到標記元素大於有序...