<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

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

        希爾排序(shellsort)又叫增量遞減(diminishing increment)排序,是由D.L. Shell發(fā)明的,這個(gè)算法是通過(guò)一個(gè)逐漸減小的增量使一個(gè)數(shù)組逐漸趨近于有序從而達(dá)到排序的目的。

          假設(shè)有一個(gè)數(shù)組int data[16] = {...}。 首先將這個(gè)增量設(shè)為16 / 2 = 8, 這樣就將這個(gè)數(shù)組分成了8個(gè)子數(shù)組,它們的索引是0, 8    1, 9   2, 10等等 。對(duì)這些子數(shù)組進(jìn)行排序。然后再使增量為8 / 2 = 4,這樣就將原數(shù)組分成了4個(gè)子數(shù)組,它們的索引分別是0, 4, 8, 12    1, 5, 9, 13等等。再對(duì)這四組數(shù)進(jìn)行排序,直到增量為1。
         以上所描述的增量遞減只是一種方法,這種方法并不是最有效率的。如f(n) = 3 * f(n - 1) + 1  f(1) = 1   (..., 121, 40, 13,  4, 1)就比上面的取增量的方法好。這種方法的時(shí)間復(fù)雜度是O(n ^1.5)

    算法如下

    #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;
        
    *= *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[] = {5316657766441110986};
        output_array(data, 
    12);
        shellsort(data, 
    12);
        output_array(data, 
    12);
        
    return 0;
    }




    Android開(kāi)發(fā)完全講義(第2版)(本書(shū)版權(quán)已輸出到臺(tái)灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2008-05-15 22:01 銀河使者 閱讀(2394) 評(píng)論(1)  編輯  收藏 所屬分類: algorithmC/C++

    評(píng)論

    # re: 希爾排序(shellsort)算法實(shí)現(xiàn)  回復(fù)  更多評(píng)論   

    這是最標(biāo)準(zhǔn)的算法
    2008-05-16 12:08 | 網(wǎng)上買(mǎi)書(shū)
    主站蜘蛛池模板: 青青草97国产精品免费观看 | 免费理论片51人人看电影| 乱人伦中文视频在线观看免费| 亚洲人成人77777在线播放| 国产亚洲精久久久久久无码| 国产成人免费一区二区三区| 希望影院高清免费观看视频| 久久精品成人免费观看| 国产精品成人免费观看| 羞羞视频免费网站含羞草| 一本天堂ⅴ无码亚洲道久久| 亚洲成人黄色在线观看| 亚洲成人中文字幕| 国产亚洲一区二区精品| 77777亚洲午夜久久多人| 又黄又爽一线毛片免费观看| 全免费一级午夜毛片| 大学生a级毛片免费观看| 久久久久久精品成人免费图片| 久久精品国产免费| 永久免费av无码入口国语片| 一级美国片免费看| 一级毛片免费视频网站| 人人鲁免费播放视频人人香蕉| 色费女人18女人毛片免费视频| 亚洲欧美乱色情图片| 亚洲精品久久久久无码AV片软件| 激情亚洲一区国产精品| 亚洲精品亚洲人成在线播放| 亚洲成无码人在线观看| 亚洲人色大成年网站在线观看| 亚洲欧洲日产专区| 亚洲熟妇av一区| 亚洲免费福利视频| 亚洲熟妇AV一区二区三区宅男| 在线aⅴ亚洲中文字幕| 亚洲av色香蕉一区二区三区| 久久久久免费看成人影片| 国产成人精品免费久久久久| 一级毛片成人免费看免费不卡| 久久精品无码专区免费青青|