插入排序之直接插入排序

2021-07-23 18:16:08 字數 1244 閱讀 7145

依次將每個記錄(無序表)插入到乙個已排好序的有序表中,得到乙個新的,記錄增加1的有序表;

向撲克牌中插入新牌,圖書館整理圖書;

有n個數,將第乙個數看做乙個有序表,從第二個開始從後向前比較,第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。

void straightinsertsort(listr,int n)

{int i,j;

for{(i=2;i在這裡主要想和大家分享一下我對崗哨的理解,所以用了《資料結構導論》中的**。

我們都能從**中可以看出它的乙個作用:進入查詢迴圈之前,儲存要給插入的鍵值r[i],使得找到位置後,不至於因為後移其他位置的鍵值而導致r[i]中的內容;

另乙個作用就是崗哨的作用:在while迴圈中「監視」陣列下標j是否越界,即,待插入的值r[i]向前比較時是否超出陣列的範圍。j代表陣列中的「鍵」,即每個值的位置,當j=0時,while迴圈中的判斷條件為  while(r[0].key

穩定;

空間複雜度o(1)  (需要乙個記錄的輔助空間)

時間複雜度o(n2)

最差情況:反序,需要移動n*(n-1)/2個元素

最好情況:正序,不需要移動元素

陣列在已排序或者是「近似排序」時,插入排序效率的最好情況執行時間為o(n),插入排序最壞情況執行時間和平均情況執行時間都為o(n2)。

插入排序之直接插入排序

插入排序概述 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為...

插入排序之直接插入排序

packagesort.algorithm publicclassdirectinsertsort inttemp,j for int i 1 i data.length i data j 1 temp 輸出排序好的資料 for int k 0 k data.length k 直接插入排序,一般對於...

插入排序之直接插入排序

直接插入排序 時間複雜度o n 2 附加空間o 1 穩定排序 define crt secure no warnings include using namespace std define len 8 有len個元素要排 struct record void insertsort record a...