希爾排序(C++)
實現
- 希爾排序又叫縮小增量排序。
- 思路
- 先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,
待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。
- 程式碼
void shell_insert_sort(int a[], int n, int dk) {
if (n < 2) {
return;
}
int index = 1;
for (int i = dk; i < n; ++i) {
if (a[i] < a[i - dk]) {
int j = i - dk; // 有序序列結尾元素下標
int val = a[i]; // 待插入元素值
while ((j >= 0) && (a[j] > val)) {
a[j + dk] = a[j];
j -= dk;
}
a[j + dk] = val;
}
print(a, n, dk, index);
++index;
}
}
void shell_sort(int a[], int n){
int dk = n /2;
while(dk >=1){
shell_insert_sort(a, n, dk);
dk = dk /2;
}
}
測試
- 程式碼
#include <iostream>
using namespace std;
void print(int a[], int num, int dk, int index) {
cout << "dk = " << dk << " index = " << index << " : ";
for (int i = 0; i < num; ++i) {
cout << a[i] << " ";
}
cout << endl;
}
int main() {
int a[] = {7, 6, 5, 4, 3, 2, 1};
shell_sort(a, sizeof(a) / sizeof(a[0]));
cin.get();
return 0;
}
- 結果
dk = 3 index = 1 : 4 6 5 7 3 2 1
dk = 3 index = 2 : 4 3 5 7 6 2 1
dk = 3 index = 3 : 4 3 2 7 6 5 1
dk = 3 index = 4 : 1 3 2 4 6 5 7
dk = 1 index = 1 : 1 3 2 4 6 5 7
dk = 1 index = 2 : 1 2 3 4 6 5 7
dk = 1 index = 3 : 1 2 3 4 6 5 7
dk = 1 index = 4 : 1 2 3 4 6 5 7
dk = 1 index = 5 : 1 2 3 4 5 6 7
dk = 1 index = 6 : 1 2 3 4 5 6 7
相關文章
- C++希爾排序C++排序
- 希爾排序排序
- 理解希爾排序排序
- Java希爾排序Java排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- 希爾排序(Shell Sort)排序
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 希爾排序——重溫排序(二)排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- PHP 排序演算法之希爾排序PHP排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- JavaScript希爾排序簡單介紹JavaScript排序
- rust-algorithms:14-希爾排序RustGo排序
- 第二章 :查詢與排序-------希爾排序排序
- 【演算法】希爾排序的實現演算法排序
- python實現希爾排序演算法Python排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- 希爾排序使用直接插入排序、二分插入排序的C++程式碼實現演算法排序C++演算法
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 【小小前端】前端排序演算法第二期(繞人的希爾排序)前端排序演算法
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序
- 五分鐘學會一個高難度演算法:希爾排序演算法排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 【演算法】排序04——程式碼簡約而不簡單的希爾排序(含程式碼實現)演算法排序
- SpringCloud大型企業分散式微服務雲架構原始碼之【資料結構】-排序-希爾排序SpringGCCloud分散式微服務架構原始碼資料結構排序
- 希爾密碼(hill密碼)密碼