插入排序
它是將乙個已經有序的資料序列,在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序一種新的排序方法。插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序。它的過程是:把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外,而第二部分就只包含這乙個元素。在第一部分排序後,再把這個最後元素插入到此刻已是有序的第一部分裡的位置。
插入排序包括:直接插入排序,二分插入排序(又稱折半插入排序),鍊錶插入排序,希爾排序(又稱縮小增量排序)。
為了方便描述,使用順序表型別定義如下:
#define maxsize 1000
typedef int keytype;
typedef struct rectype;
typedef struct sqlist;
直接插入排序:
設r[1...n]為待排序的n個記錄,r[1...i-1]已按照關鍵字從小到大排序。
void dinsert (sqlist & q) }
希爾排序:
希爾排序(shell sort)是插入排序的一種。是針對直接插入排序演算法的改進。該方法又稱縮小增量排序,因dl.shell於2023年提出而得名。
希爾排序基本思想:
先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2
該方法實質上是一種分組插入方法。
給定例項的shell排序的排序過程 :
初次取線性表的一半長度為步長,以後每次減半,直到步長為1,演算法如下:
void shsort(sqlist &q) }
好了,就先說到這裡了。
作者「flute的專欄」
優秀演算法系列 排序演算法(二)
它是將乙個已經有序的資料序列,在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序一種新的排序方法。插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序。它的過程是 把要排序的陣列分成兩部分 第一部分包含了這個...
java演算法系列
棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...
演算法系列 Move Zeroes
given an array nums,write a function to move all 0 s to the end of it while maintaining the relative order of the non zero elements.for example,given ...