DataStructure 直接插入法過程

2021-10-04 22:49:24 字數 1087 閱讀 8433

加入一組測試資料:

有點ugly的對齊

序號i0 —1 — 2 — 3 — 4 — 5 — 6 — 7 — 8 — 9 — 10

初始為:

哨兵 – 75 – 88 – 68 – 92 – 88 – 62 – 77 – 96 – 80 – 75

(開始哨兵為空,即什麼東西都沒有)

演算法**塊:

void

straghtinsertionsort

(sqlist *s)

s->r[j+1]

= s->r[0]

;//當哨兵的值大於i=1處的值時,將哨兵放回原來的位置

}//重新進行第二趟排序

}

對於兩次移動的演算法解釋:

關於時間複雜度的簡要分析:演算法分析:

①最好情況:序列直接就是有序序列

比較次數:每一次的比較只比較一次(即與前一趟排序所得有序序列的最後一項比較即可)

移動次數:存在將哨兵回送回去,所以每一次比較要移動2次

對於n項==總比較次數n-1 總移動次數2(n-1)

②最壞情況:序列直接就是逆序序列

由於前哨站的存在,while的出口條件會是使得多比較一次(自行思考)

比較次數:第i趟就要比較i+1次

移動次數:第i趟就要移動i+1次

對於n項==總比較次數約等於n^2/2 總移動次數n^2/2

③一般情況而言

對於第i趟比較的插入而言,插入的位置可以為1 2 3 …i,且每一處的概率為1/i

對於n項==總比較次數約等於n^2/4 總移動次數也處於n^2量級

時間複雜度為o(n^2)

空間複雜度為o(1),由於只是用了乙個哨兵的多餘申請空間

DataStructure 8 查詢技術

8.1概述 1 查詢方式分類 靜態查詢 不涉及插入 刪除操作的查詢 動態查詢 涉及插入 刪除操作的查詢 2 查詢結構 線性表 適用於靜態查詢,主要採用順序查詢技術,折半查詢技術.樹表 適用於動態查詢,主要採用二叉排序樹查詢技術.雜湊表 靜態查詢和動態查詢均適用,主要採用雜湊技術.3 查詢演算法的效能...

data structure 之棧與佇列

問題一 用兩個佇列實現乙個棧 思路 定義兩個佇列分別為q1,q2。呼叫棧的push操作時,直接將元素push到佇列q1中,時間複雜度為o 1 呼叫棧的pop操作時,先把q1中的q1.size 1個元素push到q2中,然後再pop出q1中的最後乙個元素,再把q2中的所有元素全部push到q1中,時間...

DataStructure 排序 原始碼實現

本篇部落格實現了 1.氣泡排序 2.氣泡排序的一種優化 當某次冒泡沒有進行交換時,退出迴圈 3.選擇排序 4.歸併排序 5.快速排序。主要是原始碼的實現,並將自己在敲的過程中所遇到的一些問題記錄下來。include include include using namespace std int nu...