青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

MyMSDN

MyMSDN記錄開發新知道

希爾排序(Shell sort)排序算法

Shell排序算法是D.L.Shell于1959年發明的,其基本思想是:

下面的這段代碼是Shell算法的C語言實現,其中shellsort為原函數,而traceShellsort則為跟蹤輸出的函數,這里我用了幾個標準輸出的語句,將數據交換的過程進行一個輸出,以更好地理解排序的過程。

#include <stdio.h>
#include <stdlib.h>
#define ARRAY_LENGTH 9
void shellsort(int v[], int n);
void arrayPrintf(int v[], int n);
void traceShellsort(int v[], int n);
int traceOut(int n, int gap, int i, int j, int isnewline);
int traceCount;
int main(void) {
int arr[ARRAY_LENGTH] = { 12, 2, 20, 19, 28, 30, 12, 42, 35 };
printf("Original array:\t\t");
arrayPrintf(arr, ARRAY_LENGTH);
/*sort the array by shell arithmetic*/
//shellsort(arr, ARRAY_LENGTH);
traceShellsort(arr, ARRAY_LENGTH);
putchar('\n');
printf("MinToMax array:\t\t");
arrayPrintf(arr, ARRAY_LENGTH);
return EXIT_SUCCESS;
}
/*shellsort函數:按遞增順序對v[0]…v[n-1]進行排序*/
void shellsort(int v[], int n) {
int gap, i, j, temp;
for (gap = n / 2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) {
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
/*shell排序算法的跟蹤版,相同的算法,它將輸出帶有跟蹤過程的數據*/
void traceShellsort(int v[], int n) {
int gap, i, j, temp;
extern int traceCount;
traceCount = 1;
for (gap = n / 2; gap > 0; gap /= 2) {
for (i = gap; i < n; i++) {
for (j = i - gap; traceOut(n, gap, i, j, !(j >= 0 && v[j] > v[j
+ gap])) && j >= 0 && v[j] > v[j + gap]; j -= gap) {
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
arrayPrintf(v, n);
}
}
}
}
/*用于跟蹤交換過程*/
int traceOut(int n, int gap, int i, int j, int isnewline) {
printf("%2d. n=%d gap=%d i=%d j=%2d %c", traceCount++, n, gap, i, j,
isnewline ? '\n' : ' ');
return 1;
}
/*用于輸出一組數組*/
void arrayPrintf(int v[], int n) {
int i;
for (i = 0; i < n; i++)
printf("%d ", v[i]);
putchar('\n');
}

下面的文字是運行上面一段代碼后產生的結果,其中跟蹤過程中出現的數組輸出,表示該數組步驟中將會產生一次位置交換過程。

Original array:		12 2 20 19 28 30 12 42 35
1. n=9 gap=4 i=4 j=0
2. n=9 gap=4 i=5 j=1
3. n=9 gap=4 i=6 j=2  12 2 12 19 28 30 20 42 35
4. n=9 gap=4 i=6 j=-2
5. n=9 gap=4 i=7 j=3
6. n=9 gap=4 i=8 j=4
7. n=9 gap=2 i=2 j=0
8. n=9 gap=2 i=3 j=1
9. n=9 gap=2 i=4 j=2
10. n=9 gap=2 i=5 j=3
11. n=9 gap=2 i=6 j=4  12 2 12 19 20 30 28 42 35
12. n=9 gap=2 i=6 j=2
13. n=9 gap=2 i=7 j=5
14. n=9 gap=2 i=8 j=6
15. n=9 gap=1 i=1 j=0  2 12 12 19 20 30 28 42 35
16. n=9 gap=1 i=1 j=-1
17. n=9 gap=1 i=2 j=1
18. n=9 gap=1 i=3 j=2
19. n=9 gap=1 i=4 j=3
20. n=9 gap=1 i=5 j=4
21. n=9 gap=1 i=6 j=5  2 12 12 19 20 28 30 42 35
22. n=9 gap=1 i=6 j=4
23. n=9 gap=1 i=7 j=6
24. n=9 gap=1 i=8 j=7  2 12 12 19 20 28 30 35 42
25. n=9 gap=1 i=8 j=6
MinToMax array:		2 12 12 19 20 28 30 35 42

為了更好地查看當前值,我將每一次交換的值用下劃線進行標出。

希爾排序(Shell sort)也稱“縮小增量排序”。它的做法不是每次一個元素挨一個元素的比較。而是先將整個待排記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序。這樣大大減少了記錄移動次數,提高了排序效率。
算法思路:先取一個正整數d1(d1<n),把全部記錄分成d1個組,所有距離為dl的倍數的記錄看成是一組,然后在各組內進行插入排序;接著取d2(d2<d1),重復上述分組和排序操作;直到di=1 (i>=1),即所有記錄成為一個組為止。希爾排序對增量序列的選擇沒有嚴格規定,一般選d1約為n/2,d2為d1/2,d3為d2/2,…,di=1。

posted on 2008-08-17 04:05 volnet 閱讀(9112) 評論(4)  編輯 收藏 引用

評論

# re: 希爾排序(Shell sort)排序算法 2008-08-17 12:04 u2usoft

圖片看不到  回復  更多評論   

# re: 希爾排序(Shell sort)排序算法 2008-08-17 17:37 dell筆記本

雖然很古老,但是很經典。  回復  更多評論   

# re: 希爾排序(Shell sort)排序算法 2008-08-17 18:47 踏雪赤兔

始終未弄明白為什么這么多人對shell排序感興趣~~正如沒弄明白為什么這么多人對冒泡排序感興趣一樣……  回復  更多評論   

# re: 希爾排序(Shell sort)排序算法[未登錄] 2008-08-17 19:27 niino

冒泡排序的名字是如何來的呢...
  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


特殊功能
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品视频| 一区二区三区四区国产| 韩国女主播一区二区三区| 亚洲一区二区三区四区中文 | 午夜亚洲性色福利视频| 亚洲成人自拍视频| 欧美大香线蕉线伊人久久国产精品| 国产一本一道久久香蕉| 久久一二三区| 欧美不卡在线| 欧美一站二站| 欧美v日韩v国产v| 国产精品99久久久久久久久| 亚洲网站啪啪| 亚洲欧美日韩另类| 久久aⅴ国产紧身牛仔裤| 激情五月婷婷综合| 亚洲精品日韩在线| 亚洲综合欧美| 亚洲激情综合| 午夜精品久久久久久久男人的天堂 | 欧美电影在线播放| 欧美人与禽性xxxxx杂性| 亚洲欧美日韩国产精品| 久久久免费精品视频| 亚洲免费影院| 欧美日韩视频第一区| 美女国产一区| 极品尤物一区二区三区| 亚洲午夜精品一区二区| 亚洲美女精品一区| 久久国产精品久久久久久| 亚洲男女自偷自拍| 欧美另类一区| 亚洲欧洲三级电影| 亚洲精品专区| 欧美激情第4页| 亚洲高清中文字幕| 亚洲人成网站在线观看播放| 久久久久亚洲综合| 国产综合色在线| 欧美日韩123| 一区二区亚洲欧洲国产日韩| 亚洲动漫精品| 亚洲在线免费观看| 国产欧美精品一区二区三区介绍| 在线亚洲高清视频| 久久久xxx| 亚洲国产精品综合| 欧美精品激情blacked18| 亚洲精品久久久久中文字幕欢迎你 | 久久av免费一区| 久久久国产91| 欧美在线观看你懂的| 亚洲黄色大片| 欧美日韩精品免费观看视一区二区| 欧美激情免费在线| 欧美日韩喷水| 亚洲国产成人在线| 国产精品夜夜嗨| 欧美高清视频在线| 午夜精品久久| 中文欧美在线视频| 欧美顶级大胆免费视频| 一区二区国产在线观看| 欧美一二三视频| 99精品视频免费全部在线| 午夜影院日韩| 亚洲免费视频网站| 欧美一区二区三区四区视频| 久久一区激情| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人精品在线观看| 久久综合电影| 在线成人h网| 久久视频国产精品免费视频在线| 亚洲在线一区二区| 国产精品theporn| 一区二区电影免费在线观看| 亚洲日本在线观看| 欧美二区在线看| 亚洲精品午夜精品| 一本色道久久综合亚洲精品小说| 久久亚洲综合色| 久久先锋影音| 亚洲国产第一页| 欧美成人a视频| 一本色道久久综合| 欧美在线视频一区二区三区| 一区二区黄色| 亚洲在线观看视频网站| 国产欧美一区二区视频| 久久激情五月激情| 欧美韩日一区二区三区| 亚洲国产精品福利| 国产精品播放| 久久亚洲不卡| 亚洲特色特黄| 亚洲成人资源| 久久精品一区二区三区四区| 亚洲国产日韩在线| 国产日韩欧美a| 欧美日韩国内自拍| 性欧美大战久久久久久久久| 亚洲精品一区二区三| 久久人91精品久久久久久不卡| 亚洲盗摄视频| 国内精品久久久久久久97牛牛| 欧美日韩精品免费观看视一区二区 | 国产精品麻豆va在线播放| 欧美一区二区免费视频| 亚洲精品免费一二三区| 久久久综合激的五月天| 亚洲欧美成人一区二区在线电影| 精品999在线观看| 黄色精品一区| 在线日韩电影| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲欧美综合v| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲黄色免费| 欧美91视频| 亚洲人体大胆视频| 亚洲毛片网站| 亚洲视屏一区| 欧美在现视频| 老司机一区二区三区| 欧美大片专区| 国产精品专区h在线观看| 国产午夜亚洲精品羞羞网站| 国产亚洲视频在线观看| 在线日韩av片| 午夜精品视频网站| av成人免费在线| 狠狠色狠狠色综合| 欧美一区视频| 麻豆国产精品va在线观看不卡| 欧美岛国激情| 一区免费观看| 销魂美女一区二区三区视频在线| 久久精品中文| 亚洲午夜小视频| 欧美国产精品劲爆| 黑人一区二区| 久久www免费人成看片高清| 免费看av成人| 久久九九全国免费精品观看| 欧美日韩在线直播| 在线观看欧美成人| 久久综合色婷婷| 欧美亚洲日本网站| 国产精品久久99| 99国产一区| 亚洲三级性片| 欧美日韩国产高清| 亚洲精品欧洲| 亚洲经典自拍| 香蕉成人啪国产精品视频综合网| 亚洲精品免费在线播放| 欧美激情偷拍| 午夜精品区一区二区三| 亚洲欧美国产高清| 韩国女主播一区| 欧美激情一区三区| 欧美伦理91i| 午夜精品一区二区三区在线播放| aaa亚洲精品一二三区| 欧美三级视频在线播放| 亚洲欧美文学| 老司机免费视频一区二区| 9久re热视频在线精品| 亚洲无限乱码一二三四麻| 国产欧美三级| 91久久中文| 国产在线拍偷自揄拍精品| 亚洲大胆人体在线| 国产精品久久毛片a| 免费短视频成人日韩| 欧美日韩亚洲精品内裤| 久久久精品国产99久久精品芒果| 六十路精品视频| 久久久91精品国产| 欧美吻胸吃奶大尺度电影| 乱码第一页成人| 国产精品一区二区三区久久久| 欧美激情在线播放| 在线观看一区| 久久精品三级| 久久亚洲精选| 韩国成人理伦片免费播放| 亚洲手机成人高清视频| 日韩手机在线导航| 麻豆成人综合网| 亚洲第一免费播放区| 精品999久久久| 猛干欧美女孩| 一区二区三区成人| 亚洲欧美日韩国产中文| 国产欧美精品一区二区色综合| 亚洲图片欧美日产|