每天乙個小程式(10) 直接插入排序

2021-06-21 04:32:47 字數 850 閱讀 2162

插入排序的基本思想:

有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外,而第二部分就只包含這乙個元素。在第一部分排序後,再把這個最後元素插入到此刻已是有序的第一部分裡的位置

演算法是這樣的,陣列的第0位為儲存帶記錄的r[i]的值,以免在移動中被覆蓋而丟失。從第2位開始將元素暫存在r[0]中,從第2位前面開始比較,若r[0]小於r[1],將r[1]後移到r[2]中,位置標記j 前移,直到沒有比r[0]大的值後,將r[0]放到r[j+1]中,這樣就完成了一趟比較,r[1]和r[2]為有序的,接下來i++,進行下一趟排序。

首先是順序表排序

//順序表插入排序

void ins_sort(datatype1 r,int n)

r[j+1] = r[0];

}}

鍊錶插入排序,鍊錶函式參考雙鏈表,傳送門雙向鍊錶

//鍊錶插入排序

void ins_sort2(dulinklist l)

q->next->data = data;

p = p->next;

}}

演算法分析

穩定性:穩定的

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

最快的情況:正序

最慢的情況:逆序

趟數為n-1趟

1008 直接插入排序 小演算法

挺水的一道題,這道題我甚至在高中刷題的時候刷到過,也算是一段高中的回憶。但是當時做的時候沒有想起來,有點可惜,這道題的關鍵就是比較 後移 插入。掌握這三個基本就沒有問題了。不過還會有乙個卡人的小點,就是當第一項進行位移的時候,要在最後把它補上去。因為第一項前面沒有數了,無法繼續比較,程式預設不需要排...

排序 一 直接插入排序

1 直接插入排序 1 定義 直接插入排序 straight insertion sort 是一種最簡單的排序方法。它的基本操作是將乙個記錄插入到乙個長度為m 假設 的有序表中,使之仍保持有序,從而得到乙個新的長度為m 1 的有序表。2 演算法思路 設有一組關鍵字 k 1 k 2 k n 排序開始就認...

排序一 直接插入排序

基本思想 當插入第i i 1 個物件時,前面的i 1 項 元素已經排序完成,這時 用 第 i 項 和 前面的 i 1 項進行比較,然後把插入的位置後面的元素後移一位 再 插入該位置。實現一趟排序的步驟 找位置 移位 插入資料 實現 void insertsort int arr size t siz...