排序演算法__希爾排序
排序演算法__希爾排序
一、介紹
希爾排序(Shell Sort)是插入排序的一種,它是針對直接插入排序演算法的改進。該方法又稱縮小增量排序。希爾排序實質上是一種分組插入方法。它的基本思想是:對於n個待排序的數列,取一個小於n的整數len(len被稱為步長)將待排序元素分成若干個組子序列,所有距離為len的倍數的記錄放在同一個組中;然後,對各組內的元素進行直接插入排序。 這一趟排序完成之後,每一個組的元素都是有序的。然後減小len的值,並重復執行上述的分組和排序。重複這樣的操作,當len=1時,整個數列就是有序的。由於多次插入排序,我們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是不穩定的。
二、C++實現
#include<iostream>
using namespace std;
void shellSort(int a[],int n)
{
for(int len=n/2;len>0;len/=2)//len表示步長 ,每次縮小一半
{
//將陣列a分為len個組
for(int i=0;i<len;i++)//對每個組進行直接插入排序
{
for(int j=i+len;j<n;j+=len)
if(a[j]<a[j-len])
{
int tmp=a[j];
int k=j-len;
while(k>=0&&a[k]>tmp)
{
a[k+len]=a[k];
k-=len;
}
a[k+len]=tmp;
}
}
}
}
int main()
{
int a[]={10,9,8,7,6,5,4,3,2,1};
int len=sizeof(a)/sizeof(a[0]);
printf("排序前:");
for(int i=0;i<len;i++)
printf("%d ",a[i]);
shellSort(a,len);
printf("\n排序後:");
for(int i=0;i<len;i++)
printf("%d ",a[i]);
return 0;
}
三、時間複雜度
~
相關文章
- 【排序演算法】- 希爾排序排序演算法
- PHP 排序演算法之希爾排序PHP排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 希爾排序排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 理解希爾排序排序
- Java希爾排序Java排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- 希爾排序——重溫排序(二)排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- 【演算法】希爾排序的實現演算法排序
- python實現希爾排序演算法Python排序演算法
- 希爾排序(Shell Sort)排序
- C++希爾排序C++排序
- 希爾排序(C++)排序C++
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- 第二章 :查詢與排序-------希爾排序排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 【小小前端】前端排序演算法第二期(繞人的希爾排序)前端排序演算法
- JavaScript希爾排序簡單介紹JavaScript排序
- rust-algorithms:14-希爾排序RustGo排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- Python 一網打盡<排序演算法>之從希爾排序演算法的分治哲學開始Python排序演算法
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 【演算法】排序04——程式碼簡約而不簡單的希爾排序(含程式碼實現)演算法排序
- 一組關鍵字序列,分別給出用希爾排序、直接選擇排序演算法從小到大排序結果排序演算法
- 希爾排序使用直接插入排序、二分插入排序的C++程式碼實現演算法排序C++演算法
- 五分鐘學會一個高難度演算法:希爾排序演算法排序
- 對資料結構和演算法的總結和思考(三)--希爾排序資料結構演算法排序