希爾排序的原理:本質上是插入排序。插入排序在某些情況下效率是很高的,比如需要排序的序列基本有序時,插入排序的效率可以接近o(n)。
那麼問題在於,現實中的序列基本上都是不滿足基本有序的,如何使乙個序列在進行插入排序前是滿足基本有序的呢?科學家希爾將插入排序進行了改進,提高了排序的效率。
希爾排序的實現:將待排序列分割成若干個子串行,但子串行的不是逐段分割的,每個子串行由相隔某個增量的元素組成,對各個子串行進行插入排序。然後將增量縮小,再次分割成乙個個的子串行。。。,最後直到增量為1時,整個序列只有乙個子串行,就是序列本身。
以序列12 17 30 50 20 60 65 4 19為例
第一次增量gap=n/2=4
序列分成4個子序列,,,,
(分組沒有改變元素原來的位置)分別進行插入排序後的序列為:
12 17 30 4 20 60 65 50 19
第二次增量為gap=gap/2=2
序列分成2個子序列,,排序後
12 4 20 17 30 50 65 60 19
第三次增量為gap=1
序列分成乙個子串行,排序後
4 12 17 19 20 30 50 60 65
//希爾排序,對長度為n的陣列a排序
static void shellsort()
{ for(int gap=n/2;gap>0;gap/=2)
{ for(int i=0;i=gap && target
排序七部曲之(五)歸併排序
歸併排序採用的是分 合的策略,什麼是分?什麼是合?我們舉個例子,例如要對長度為n的序列a排序,我們可以將序列a均分成兩個部分,並且對著兩個部分分別進行排序,這便是分。將排好序的兩個部分按順序整合到一起,這便是合。這樣通過先分再合,就對序列a進行了排序。歸併序列的難點在於合,兩個排好序的序列如何合併成...
愛情七部曲
第一部 非你莫屬 歌手 tank 獨白 你知道嗎?我很喜歡牽著你的手的感覺!那是什麼樣子?我好希望再來一次!懂得讓我微笑的人 再沒有誰比你有天份 輕易闖進我的心門 明天的美夢你完成 整個宇宙 浩瀚無邊的盡頭 每顆渺小星球 全都繞著你走 愛我非你莫屬 我只願守護 由你給我的幸福 愛我非你莫屬 也許會笑...
電子商務之網路營銷七部曲
近年來電子商務的發www.cppcns.com展環境不斷在完善,發展動力也是持續增加,電子商務服務行業更是蓬勃發展,逐步成為國民經濟新的增長點。在電子商務行業,我們要注意什麼呢?就從歐巴馬競選成功之路來看電子商務之網路營銷七部曲。1.關注買家的角色 歐巴馬在競選的時候有個社會 團隊工作,他們的競選陣...