03演算法與資料結構體系課之插入排序

2021-10-09 01:31:19 字數 1013 閱讀 8612

插入排序的思想是將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列(將序列的第乙個資料看成是乙個有序的子串行,然後從第二個記錄逐個向該有序的子串行進行有序的插入,直至整個序列有序)

public

class

insertionsort

public

static

comparable

>

void

sort

(e arr)

else}}

}private

static

void

swap

(e arr,

int i,

int j)

public

static

void

main

(string[

] args)

}

在插入排序中需要對序列元素進行頻繁的swap操作,這是非常耗時間的,所以我們只要減少甚至消除swap操作,插入演算法的時間消耗會減少,優化思路是:使用臨時變數t記錄待排序的資料,使用哨兵下標j往前查詢資料的插入位置,在查詢過程中,只要滿足j所指元素值大於臨時變數t這個條件,就將j所指元素往後平移一位,當j不滿足條件時,此時j的位置就是待排序元素該插入的位置,將臨時變數t賦值到j處即可。

public

static

comparable

>

void

sort2

(e arr)

arr[j]

=t;}

}

對於有序資料或者近乎有序的資料,插入排序的時間複雜度是o(n),整體來說,插入排序的時間複雜度是o(n^2)

實現從後向前掃瞄,對於每乙個arr[i],尋找arr[i…n)區間中需要插入的位置。

public static > void sort2(e arr)

arr[j]=t;

}}

資料結構與演算法(03)

1.雙鏈表應用例項 1.1雙向鍊錶的操作分析和實現 使用帶head頭的雙向鍊錶實現 管理單向鍊錶的缺點分析 1 單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。2 單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶可以自我刪除,單鏈表刪除時節點,總是找到temp,temp是刪除節點...

資料結構 演算法 03

1.棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 2.佇列 佇列 queue 是只允許在一端進行...

資料結構與演算法之美 03鍊錶

陣列 缺點 大小固定 優點 簡單實用,訪問效率更高 可借助cpu快取機制 鍊錶 缺點 記憶體不連續,訪問效率不高。對記憶體使用苛刻,當鍊表發生頻繁插入 刪除操作時,會導致頻繁的記憶體申請和釋放。優點 鍊錶本身沒有大小的限制,天然地支援動態擴容 1 在刪除給定指標指向的結點時,我們已經找到了要刪除的結...