www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > C語(yǔ)言編程
[導(dǎo)讀]01—希爾排序算法思想希爾排序也是一種插入排序,是簡(jiǎn)單插入排序改進(jìn)后的一個(gè)更高效版本,同時(shí)也是首批突破O(n^2)算法之一。希爾排序算法思想:希爾排序是按照下標(biāo)增量進(jìn)行分組,對(duì)每組使用插入排序算法進(jìn)行排序,隨著增量減少,每組包含的關(guān)鍵字越來(lái)越多,增量減到1時(shí),整個(gè)序列被分為一組,...


01

希爾排序算法思想


希爾排序也是一種插入排序,是簡(jiǎn)單插入排序改進(jìn)后的一個(gè)更高效版本,同時(shí)也是首批突破O(n^2)算法之一。

希爾排序算法思想:希爾排序是按照下標(biāo)增量進(jìn)行分組,對(duì)每組使用插入排序算法進(jìn)行排序,隨著增量減少,每組包含的關(guān)鍵字越來(lái)越多,增量減到1時(shí),整個(gè)序列被分為一組,算法終止。

我們以增序排序?yàn)槔柵判蚧静襟E:選擇初始增量gap = length / 2,縮小增量繼續(xù)以gap = gap / 2的方式進(jìn)行,直到增量gap = 1為止,增量的每次變化都會(huì)將原始序列劃分為若干組,分別對(duì)每一組進(jìn)行插入排序,每一次通過增量劃分組進(jìn)行插入排序宏觀上小的數(shù)移到了前面,大的數(shù)移到了后面,最后增量gap = 1進(jìn)行插入排序后就是最終的有序序列。本文會(huì)以圖解的方式詳細(xì)介紹希爾排序算法的整個(gè)工作過程。原始序列

增量gap =?4分組圖

增量gap = 4排序結(jié)果圖

增量gap = 2分組圖

增量gap = 2排序結(jié)果圖

增量gap = 1分組圖

增量gap = 1排序結(jié)果圖

02

希爾排序算法實(shí)現(xiàn)

希爾排序完整源碼如下://插入排序
void?insert_sort(int?*arr, int?length, int?start, int?gap){
????if(arr == NULL || length <= 0?|| start < 0?|| gap <= 0){
????????return;
????}
????int?i = 0, j = 0;
????int?value?= 0;

????for(i = start; i < length - gap; i = gap){
????????value?= arr[i gap];
????????for(j = i; j >= start; j -= gap){
????????????if(value?< arr[j]){
????????????????arr[j gap] = arr[j];
????????????}else{
????????????????break;
????????????}
????????}
????????arr[j gap] = value;
????}
}

//希爾排序
void?shell_sort(int?*arr, int?length){
????if(arr == NULL || length <= 0){
????????return;
????}
????int?gap = 0, start = 0;
????int?count = 0;
????for(gap = length / 2; gap > 0; gap /= 2){
????????start = 0;
????????for(count = 0; count < length / gap; count ){
????????????insert_sort(arr, length, start, gap);
????????????start ;
????????}
????}
}
現(xiàn)在寫一個(gè)小程序驗(yàn)證算法的正確性,代碼如下:

#include?
#include?"shell_sort.h"

int?main()?{
????int?i = 0;
????printf("希爾排序結(jié)果\n");
????int?arr[7] = {8, 23, 64, 12, 0, 5, 6};
????shell_sort(arr, 7);
????for(i = 0; i < 7; i ){
????????printf("%d ", arr[i]);
????}
????printf("\n");

????return?0;
}

編譯運(yùn)行輸出如下:


希爾排序結(jié)果
0 5 6 8 12 23 64

算法完全正確!


版權(quán)申明:內(nèi)容來(lái)源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無(wú)法確認(rèn),都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并致歉。謝謝!


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉