希爾排序實現
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。 希爾排序是非穩定排序演算法。 希爾排序是基於插入排序的以下兩點性質而提出改進方法的: 插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率
#include<iostream> using namespace std; void shell_sort(int a[], int n) { int gap = 4; for (; gap >= 1; gap--) { for (int i = 0; i<gap; i++) { for (int j = i + gap; j<n; j += gap) { if (a[j]<a[j - gap]) { int tmp = a[j]; int k = j - gap; while (k >= 0 && a[k]>tmp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = tmp; } } } } } int main() { int test[10] = { 3,4,7,1,2,666,67,9,2,5 }; shell_sort(test, 10); for (int i = 0; i<10; i++) { cout << test[i] << " "; } return 0; }
相關推薦
希爾排序實現(Java)
希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。 該方法的基本思想是: 1、把記錄按步長 gap 分組,對每組記錄採用直接插入排序方法進行排序。 2、隨著步長逐漸減
希爾排序實現與複雜度、穩定性分析
import java.util.*; public class ShellSort { public int[] shellSort(int[] a, int n) { //先判斷條件
希爾排序實現
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。 希爾排序是非穩定排序演算法。 希爾排序是基於插入排序的以下兩點性質而提出改進方法的: 插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率 #include<iostream&g
排序算法入門之希爾排序(java實現)
入門 介紹 插入 一次 變化 shells ngx i++ ava 希爾排序是對插入排序的改進。插入排序是前面元素已經有序了,移動元素是一個一個一次往後移動,當插入的元素比前面排好序的所有元素都小時,則需要將前面所有元素都往後移動。希爾排序有了自己的增量,可以理
希爾排序的實現與分析
有了插入排序的基礎,希爾排序就很好理解了。 插入排序總是比較和移動相鄰元素,但如果一個元素的位置需要移動很大的話就需要付出很大的代價。希爾排序對插入排序進行了簡單而又有效的加速:使陣列中任意間隔為h的元素都是有序的,即把陣列中間任意一組隔為a的元素單獨拿出來,它們都是有序的。當希爾排序中的h=1
希爾排序超詳解及其java實現
希爾排序雖然已經十分古老了,但其思想確實十分值得我們學習,非常的巧妙 雖然很多資料說希爾排序是叫shell的人提出來的,我個人卻十分好奇,shell的英文好意為殼的意思,感覺希爾排序的思想就像一層層的殼一樣,從內到外越來越大,當然這是我胡謅的,具體原理如下(用的一個例項進行說明的): 原理:
希爾排序 java實現
希爾排序屬於插入排序的一種,也稱為縮小增量法,是插入排序的一種改進版本,其基本思想是,先取一個小於n的整數i1作為第一個增量,所有距離為a的記錄放在同一組,把陣列的全部記錄分成了a組子序列,再對各組子序列進行直接插入排序,然後,取第二個增量i2作為第二個增量,重複分組和排序,直到最後一個
資料結構——排序與查詢(2)——希爾排序(C++實現)
希爾排序原理 希爾排序(Shell’s Sort),也稱為“縮小增量排序”,是一種插入排序類的演算法。最簡單的插入排序,我在上一個專欄的一篇文章C++抽象程式設計——演算法分析(8)——插入排序演算法與分析有提到過,這裡就不再贅述,這裡就只介紹一些我以前沒寫過的演算法。 希爾排序是一
SWUST資料結構--希爾排序演算法實現
#include<iostream> using namespace std; int main(){ int i,n; int a[50]; cin>>n; for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<
java實現 》從 》 直接插入排序 》到》 希爾排序
直接插入排序和希爾排序,把這兩個放一起是便於記憶,這兩個排序是差不多的,希爾排序也只是對插入排序進行一點修改: 首先是看一下我們的插入排序: package sort; public class InsertSort { public static void main(String[]
怎樣讓python實現希爾排序演算法
def shellSort(items): inc = len(items) / 2 while inc: for i in xrange(len(items)): j = i temp = items[i] while j >= inc and items[j-inc] > t
排序演算法之希爾排序【java實現】
前面介紹的冒泡、選擇、插入排序演算法雖然簡單直觀,但是在排序上的效率一般。對於大量的資料排序就需要更加高效的演算法,那麼下面來介紹一下高效的排序演算法----希爾排序,又稱Shell排序,縮小增量排序。 實際上,希爾排序是基於插入排序的思想。 實現步驟: (1)將有n個元素的陣列分成n/
【初探】“ 希爾排序 ”—— C++程式碼實現
目錄 希爾排序演算法介紹 希爾排序的基本思想 希爾排序的演算法效能 時間複雜度 直接插入排序和希爾排序的比較 希爾排序演算法介紹 ● 希爾排序是希爾(Donald Shell)於
白話經典算法系列之三 希爾排序的實現
希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因DL.Shell於1959年提出而得名。 該方法的基本思想是:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)
順序表儲存實現氣泡排序,選擇排序,插入排序,希爾排序,基數排序
#include<iostream> using namespace std; const int MAXSIZE = 100; typedef int ElemType; struct Data { ElemType key; // int shu
基礎算法系列之排序演算法-7.希爾排序 並解決hdu 1425問題(java實現)
我們從最初的氣泡排序演算法,到上篇文章的折半插入排序演算法,我們一共學習了5種排序演算法,相信以大家的聰明才智肯定都消化了^_^。在本篇文章中,我們又將學習第6種排序演算法——希爾排序演算法。那就讓我們直奔主題吧。 希爾排序 讓我們回想一下直接插入排序演算
排序演算法4——圖解希爾排序及其實現
排序演算法1——圖解氣泡排序及其實現(三種方法,基於模板及函式指標) 排序演算法2——圖解簡單選擇排序及其實現 排序演算法3——圖解直接插入排序以及折半(二分)插入排序及其實現 排序演算法4——圖解希爾排序及其實現 排序演算法5——圖解堆排序及其實現 排序演算法6——圖解歸併排序及其遞迴與非
java實現直接插入排序和希爾排序
直接插入排序和希爾排序,把這兩個放一起是便於記憶,這兩個排序是差不多的,希爾排序也只是對插入排序進行一點修改: 首先是看一下我們的插入排序: package sort; public class InsertSort { public static void main
排序演算法 | 希爾排序演算法原理及實現和優化
希爾排序也是一種插入排序演算法,也叫作縮小增量排序,是直接插入排序的一種更高效的改進演算法。 希爾排序因其設計者希爾(Donald Shell)的名字而得名,該演算法在 1959 年被公佈。一些老版本的教科書和參考手冊把該演算法命名為 Shell-Metzner
3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)
3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分) package com.interview; /** * 各種排序演算法 */