從0開始復健 演算法之內部排序和增小縮量排序

2021-09-23 01:53:24 字數 1126 閱讀 7011

插入排序(insertion sort)

直接插入排序

折半插入排序

表插入排序

氣泡排序(bubble sort)

直接插入排序:設有n個記錄,存放在陣列r中,重新安排記錄在陣列中的存放順序,使得按關鍵碼有序。即

r[1].key<=r[2].key<=…<=r[n].key;

直接插入排序方法:僅有乙個記錄的表總是有序的,因此,對n個記錄的表,可從第二個記錄開始直到第n個記錄,逐個向有序表中插入,從而得到n個記錄按關鍵碼有序的表。

直接插入排序的時間複雜度為o(n²),並且是乙個穩定的排序方法。

public static void insertionsort(int arr) 

}}

折半插入排序

思想:不斷二分有序表來確定插入位置,即一次比較,通過待插入記錄與有序表居中的記錄按關鍵碼比較,將有序表一分為二,然後一直重複上述操作。當最後的子表只有乙個記錄的時候,便確定了插入的位置。

void binary_insertion_sort(int arr, int len) 

}for (j = i-1; j>=high+1; j--)

arr[j+1] = arr[j];

arr[j+1] = temp;

}

氣泡排序:對於n個記錄的表,第一趟冒泡得到乙個關鍵碼最大的記錄r[n],第二趟對n-1個記錄進行氣泡排序,再得到乙個關鍵碼最大的記錄r[n-1],重複上述操作,直到得到n個記錄按關鍵碼有序的表。

public static void bubblesort(int arr) 

}if (flag)

}}

希爾排序:又稱增小縮量排序。思路:選擇步長,按步長序列個數k,對序列進行k趟排序。

void shellsort(mydatatype *ary,int len)

j=j-increment;}}

}}

C 索引從0開始的堆排序演算法實現

睡不著覺起來尋思尋思幹點啥吧,好像好久沒寫堆排了。於是寫了個索引從0開始的堆排,這次把建堆函式略了並在heapsort主函式裡,索引從0開始到size 1結束,長度size。這個堆排和索引從1開始的堆排區別就是對於節點i,兩個子節點分別為2i 1和2i 2。另外建堆時從索引size 2 1開始倒序維...

從排序開始 演算法之旅

每次說到排序,都會想起剛學習c語言那會的氣泡排序還有哨兵設定改進方法。但是看過演算法導論後才知道自己是多麼淺薄,排序的方法有很多。問題描述 輸入 n個數的乙個序列 輸出 序列滿足一定條件 如從大到小或是從小到大 的乙個排列 1 插入排序 思想 從打撲克牌說起,這是乙個很形象的例子,日常生活中抓牌的時...

資料結構之內部排序演算法總結筆記

內部排序演算法 排序的基本概念 把一組無序的資料元素按照關鍵字值遞增 或遞減 的順序重新排列。一 插入排序 思想 將序列分為 有序段 與 無序段 兩段,然後依次將 無序段 中的元素插入到 有序段 的正確位置。尋找元素應插入的位置可用 直接 和 折半 兩種方式進行查詢。對應演算法 直接插入排序 折半插...