插入類排序;
最簡單粗暴的直接插入排序:
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 ...