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

elva

shellsort之二

轉自:
http://blog.sina.com.cn/s/blog_61e439e50100mfe8.html

希爾排序(shellsort)又叫增量遞減(diminishing increment)排序,是由D.L. Shell發明的,這個算法是通過一個逐漸減小的增量使一個數組逐漸趨近于有序從而達到排序的目的,該算法由1959年公布。

最差時間復雜度:根據步長序列的不同而不同。已知最好的: O(nlog2n)

最優時間復雜度:O(n)

平均時間復雜度:根據步長序列的不同而不同。

原始的算法實現在最壞的情況下需要進行O(n2)的比較和交換。V. Pratt的書[1] 對算法進行了少量修改,可以使得性能提升至O(n log2 n)。這比最好的比較算法的O(n log n)要差一些。

希爾排序通過將比較的全部元素分為幾個區域來提升插入排序的性能。這樣可以讓一個元素可以一次性地朝最終位置前進一大步。然后算法再取越來越大的步長進行排序,算法的最后一步就是普通的插入排序,但是到了這步,需排序的數據幾乎是已排好的了(此時插入排序較快)。

假設有一個很小的數據在一個已按升序排好序的數組的末端。如果用復雜度為O(n2)的排序(冒泡排序或插入排序),可能會進行n次的比較和交換才能將該數據移至正確位置。而希爾排序會用較大的步長移動數據,所以小數據只需進行少數比較和交換即可到正確位置。

一個更好理解的希爾排序實現:將數組列在一個表中并對列排序(用插入排序)。重復這過程,不過每次用更長的列來進行。最后整個表就只有一列了。將數組轉換至表是為了更好地理解這算法,算法本身僅僅對原數組進行排序(通過增加索引的步長,例如是用i += step_size而不是i++)。

例如,假設有這樣一組數[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我們以步長為5開始進行排序,我們可以通過將這列表放在有5行的表中來更好地描述算法,這樣他們就應該看起來是這樣:

13 14 94 33 82

25 59 94 65 23

45 27 73 25 39

10

然后我們對每行進行排序:

10 14 73 25 23

13 27 94 33 39

25 59 94 65 82

45

當我們以單行來讀取數據時我們得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ].這時10已經移至正確位置了,然后再以3為步長進行排序:

10 14 73

25 23 13

27 94 33

39 25 59

94 65 82

45

排序之后變為:

10 14 13

25 23 33

27 25 59

39 65 73

45 94 82

94

最后以1步長進行排序(此時就是簡單的插入排序了)。

步長的選擇是希爾排序的重要部分。只要最終步長為1任何步長序列都可以工作。算法最開始以一定的步長進行排序。然后會繼續以一定步長進行排序,最終算法以步長為1進行排序。當步長為1時,算法變為插入排序,這就保證了數據一定會被排序。

算法如下

#include <stdio.h>

 

void output_array(int data[], int n)

{

    int i;

    for(i = 0; i < n; i++)

        printf("%d ", data[i]);

    printf("\n");

}

void swap(int *a, int *b)

{

    int x;

    x = *a;

    *a = *b;

    *b = x;

}

void insertion_sort(int data[], int n, int increment)

{

    int i, j;

    for(i = increment; i < n; i += increment)

        for(j = i; j >= increment && data[j] > data[j - increment]; j -= increment)

            swap(&data[j], &data[j - increment]);

}

void shellsort(int data[], int n)

{

    int i, j;

    for(i = n / 2; i > 2; i /= 2)

        for(j = 0; j < i; j++)

            insertion_sort(data + j, n - j, i);

    insertion_sort(data, n, 1);

}

int main()

{

    int data[] = {5, 3, 1, 665, 77, 66, 44, 11, 10, 9, 8, 6};

    output_array(data, 12);

    shellsort(data, 12);

    output_array(data, 12);

    return 0;

}

posted on 2010-11-01 18:08 葉子 閱讀(416) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            黄色成人在线网站| …久久精品99久久香蕉国产| 亚洲色图自拍| 亚洲激情中文1区| 欧美国产一区二区三区激情无套| 亚洲破处大片| 亚洲精品之草原avav久久| 欧美日韩www| 亚洲欧美日韩一区二区| 欧美一区二区三区日韩| **性色生活片久久毛片| 亚洲激情图片小说视频| 欧美系列精品| 久久婷婷丁香| 欧美精品一区三区| 性欧美大战久久久久久久免费观看| 香蕉亚洲视频| 91久久国产自产拍夜夜嗨| 亚洲免费大片| 一区在线播放视频| 亚洲精品国产精品国自产观看浪潮| 国产精品扒开腿做爽爽爽视频 | 国产精品久久久久9999| 性18欧美另类| 蜜桃视频一区| 欧美在线日韩精品| 蘑菇福利视频一区播放| 亚洲欧美日本伦理| 欧美暴力喷水在线| 欧美在线二区| 欧美人交a欧美精品| 久久久欧美一区二区| 欧美日韩高清一区| 蜜臀av在线播放一区二区三区| 欧美激情中文不卡| 免费av成人在线| 国产精品久久久久久久久久尿 | 毛片一区二区三区| 欧美午夜一区二区三区免费大片| 久久亚洲一区二区| 国产精品美女主播在线观看纯欲| 欧美国产一区二区在线观看| 国产精品免费看久久久香蕉| 亚洲国产精品免费| 韩国精品主播一区二区在线观看| 日韩一级在线观看| 91久久视频| 久久久人人人| 久久久久久综合| 国产精品日韩在线| 亚洲伦伦在线| 亚洲黄色有码视频| 久久久久久久综合色一本| 亚洲欧美中文日韩v在线观看| 欧美韩日一区| 亚洲国产你懂的| 亚洲国产免费看| 久久久噜噜噜久久狠狠50岁| 久久se精品一区精品二区| 国产精品久久久久毛片大屁完整版 | 亚洲最新色图| 欧美v亚洲v综合ⅴ国产v| 老司机午夜精品视频| 国产日韩在线视频| 亚洲欧美日韩国产综合精品二区| 亚洲伊人一本大道中文字幕| 欧美日韩精品系列| 一本色道久久综合亚洲精品小说 | 另类图片国产| 国内外成人免费视频| 欧美一区二区成人6969| 久久成人精品视频| 国产午夜精品麻豆| 久久精品视频在线观看| 模特精品裸拍一区| 亚洲国语精品自产拍在线观看| 久久久另类综合| 亚洲大片一区二区三区| 亚洲国产天堂久久综合| 欧美国产一区二区在线观看| 亚洲精品自在在线观看| 亚洲网站在线播放| 国产精品一区二区在线观看| 欧美一区二区三区电影在线观看| 久久久之久亚州精品露出| 一区二区在线不卡| 欧美电影免费观看大全| 99国产一区| 久久久另类综合| 亚洲人成网站在线观看播放| 欧美伦理影院| 亚洲综合日本| 亚洲第一黄网| 性做久久久久久久久| 红杏aⅴ成人免费视频| 欧美高清在线| 午夜精品成人在线| 亚洲春色另类小说| 亚洲一区二区三区在线观看视频| 国产精品视区| 欧美freesex交免费视频| 亚洲视频一区二区| 久久综合中文字幕| 亚洲一区一卡| 在线观看免费视频综合| 欧美日韩精品在线播放| 久久精品观看| 亚洲私人影院| 91久久精品一区二区别| 久久国产免费| 在线亚洲一区| 亚洲国产日韩欧美在线动漫| 国产精品久久久久久久久久久久久久| 久久精品道一区二区三区| 亚洲日产国产精品| 老巨人导航500精品| 亚洲欧美国产不卡| 亚洲人成在线免费观看| 国产在线不卡精品| 国产精品久久久久久久久久尿| 免费成人高清视频| 久久久久久综合| 亚洲欧美日韩综合| 一本色道综合亚洲| 亚洲精品男同| 最新亚洲视频| 欧美福利视频网站| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲欧美综合国产精品一区| 亚洲精品四区| 亚洲人久久久| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美伦理a级免费电影| 久久人人爽国产| 久久九九精品| 久久精品视频网| 久久精品国产综合精品| 欧美在线观看一二区| 亚洲欧美在线免费观看| 亚洲欧美在线一区| 欧美一级黄色网| 欧美一区二区大片| 久久精品视频播放| 久久久999| 开心色5月久久精品| 蜜桃伊人久久| 欧美精品久久久久久| 欧美精品七区| 欧美天堂在线观看| 欧美午夜一区二区三区免费大片| 欧美日韩一区二区三区四区五区| 欧美日韩成人| 国产精品久99| 国产亚洲一区二区精品| 国产一区二区丝袜高跟鞋图片| 国产亚洲福利一区| 狠狠狠色丁香婷婷综合激情| 黑人巨大精品欧美一区二区| 亚洲春色另类小说| 亚洲精品在线观看免费| 一区二区欧美视频| 欧美亚洲免费高清在线观看| 欧美在线免费一级片| 久久视频一区二区| 亚洲电影欧美电影有声小说| 亚洲人成网站精品片在线观看 | 中文成人激情娱乐网| 亚洲男同1069视频| 欧美在线视屏| 欧美精品一区二区三| 国产精品久久国产精品99gif| 国产欧美一区二区三区久久人妖| 国产午夜亚洲精品不卡| 亚洲国产一区二区三区a毛片| 一个人看的www久久| 久久精品电影| 91久久夜色精品国产网站| 亚洲一级免费视频| 另类av导航| 国产精品日本精品| 亚洲欧洲日产国产网站| 亚洲女女做受ⅹxx高潮| 久久这里有精品15一区二区三区| 91久久午夜| 欧美在线中文字幕| 欧美性猛交视频| 亚洲成人原创| 性欧美办公室18xxxxhd| 亚洲国产高清在线| 欧美一级片一区| 欧美午夜片欧美片在线观看| 尤物yw午夜国产精品视频| 亚洲已满18点击进入久久| 牛牛影视久久网| 亚洲欧美日韩在线播放| 欧美日韩成人一区| 亚洲经典三级| 久久久久久69| 午夜日韩视频| 国产精品激情电影|