插入排序 直接插入, 折半插入,希爾插入

2021-08-11 03:32:59 字數 948 閱讀 8794

插入類排序;

最簡單粗暴的直接插入排序:

void direct_insert_sort(int n)

}return ;

}

優點:一旦前面排好了之後後面的插入非常的快。

稍微高大上一點的折半插入排序(但是再移動的過程中把時間複雜都給彌補上了)時間複雜度依舊挺高的

//折半插入排序

void bi_insert_sort(int n)

for(j = i-1; j >= right+1; j--)

num[j+1] = num[j];

num[right+1] = num[0];

}}

超級神奇的希爾排序:

希爾排序:基於直接插入排序在前幾個排好之後再排後面的非常快的優勢,以及插入排序越短越快的思想,希爾發明了一種新的排序方法,稱為希爾排序。

演算法主要流程:

1. 選取乙個希爾增量。

2. 按照這個增量對序列進行一次排序分段(跳著進行直接插入排序)。

3. 變化希爾增量,直至為1.

希爾增量 d 可以取任意值,但是要保證最後一定取到

1,因為只有最後取到

1才能保證對整個序列進行了一次排序

code:

//#include#include#include#include#includeusing namespace std;

const int maxn = 1000000;

int num[maxn];

//希爾插入排序

void shell_insert(int n, int dk)

}}void shell_sort(int n)

return ;

}int main()

插入排序(直接插入 希爾)

排序策略 在有序表的恰當處插入乙個新元素,並保持該有序表的有序性 即,當插入第n個元素時,前n 1個元素已經是有序排列 排序過程 以集合中資料為例 初始儲存 第一趟 插入38 第二趟 插入65 第三趟 插入97 第四趟 插入76 第五趟 插入13 第六趟 插入27 第七趟 插入49 一共有八個資料,...

插入排序 直接插入 希爾排序

直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。設定第乙個元素位置為哨兵,用來存放待插入元素。include include include using namespace ...

插入排序(直接插入排序 折半插入排序和希爾排序)

所謂插入排序就是將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中,直到全部記錄插入完成。1.直接插入排序 假設在排序過程中,待排序表l 1 n 在某次排序過程中的某一時刻狀態如下 為了實現將元素l i 插入到已有序列的子串行l 1 i 1 中,需要執行以下操作 1 查詢l i 在l ...