C++希爾排序
希爾排序的思想較為巧妙,它的思想:將要排序的檔案分為n個組,距離為s的分為一組,再將這一組進行排序,完成這個操作之後,再將s的值變小繼續排序直到距離為零時
- 下圖進行第一次排序:首先要知道一個距離的值,這個值可以設為陣列長度的一半(超過的話第一次排序不能將所有的數值都排序一次),在本案例中為4,初始值可以設為從下標為4的元素開始,這樣正好可以使這個陣列從下標為0的位置比較,元素都可以進行排序一遍
- 第一遍時,距離較大,每組所記錄數較少,所以速度較快。後面的幾次排序時,距離就會縮小,縮小的原則為除以2,在第二次排序時,明顯每組的記錄數就變多了,但是由於在第一遍排序的基礎上,排序的速度並不會慢
- 在排序的過程中:還是以上圖為例子,在下標為7的元素再進行排序時,他首先與下標為i=7-4的數比較,前者是小於後者的(在此為升序),所以要將這個較大的數放在這個數的下標加距離位置(也就是下標為7的位置),那麼當前的這個元素還要繼續比較,他與7-4這個位置再減4(即i-4=-1)的位置比較,結果這個位置不存在,那麼本次的比較結束,且當前下標的值插入在i+4的位置
- 當距離為1時已經可以將所有的元素都排序一遍,且由於前面的排序使得後面的排序變得快速
程式碼如下:
shellSort(int arr[],int len,int n){
//len為arr的長度,n為希爾排序的分組間隔
int i,j,temp,k;
for(i=n;i>0;i>>=1){
for(j=i;j<len;j++){
temp = arr[j];
k = j-i;
while(k >= 0 && temp < arr[k]){
arr[k + i] = arr[k];
k-=i;
}
arr[k+i] = temp;
}
}
}
相關文章
- 希爾排序(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密碼)密碼