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

elva

shellsort之一

轉(zhuǎn)自:
http://apps.hi.baidu.com/share/detail/15570437


基本思想

先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進(jìn)行直接插人排序;然后,取第二個增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?/p>

算法實(shí)現(xiàn)(Java語言)

package org.shirdrn.internal.sort;

/**
* <p><B>希爾排序算法類</B>
* <p>基本思想:
* <p>
* <p>先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的
* 倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進(jìn)行直接插人排序;然后,取第二個增量d2<d1重復(fù)上
* 述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行
* 直接插入排序?yàn)橹埂?br>* <p>
* <p>該方法實(shí)質(zhì)上是一種分組插入方法。
*
* @author shirdrn
*
*/
public class ShellSort {

private Integer[] array;

public ShellSort(Integer[] array) {
   this.array = array;
}

public void sort() {
   int d = array.length;
   do {
    d /= 2;
    shellPass(d); // 根據(jù)逐漸減小的間隔增量,循環(huán)調(diào)用一趟排序
   }while(d>1);
}

/**
* 希爾一趟排序
*
* @param d 間隔增量
*/
private void shellPass(int d) {
   Integer tmp;
   for(int i=d; i<array.length; i++) { // 數(shù)組下標(biāo)從0開始,初始i=d表示一趟排序中第二個元素
    tmp = array[i]; // array[i]的拷貝
    // 如果待處理的無序區(qū)第一個元素array[i] < 有序區(qū)最大的元素array[i-d]
    // 需要將有序區(qū)比array[i]大的元素向后移動
    if(array[i]<array[i-d]) {
     int j=i-d;
     while(j>=0 && tmp<array[j]) {
      array[j+d] = array[j]; // 將左側(cè)有序區(qū)中元素比array[i]大的array[j+d]后移
      j -= d;
     }
     // 如果array[i] >= 左側(cè)有序區(qū)最大的array[i-d],或者經(jīng)過掃描移動后,找到一個比array[i]小的元素
     // 將右側(cè)無序區(qū)第一個元素tmp = array[i]放到正確的位置上
     array[j+d] = tmp;
    }
   }
}

/**
* 輸出數(shù)組元素
*/
public String print() {
   StringBuffer sb = new StringBuffer();
   for(int i=0; i<array.length; i++) {
    sb.append(array[i]);
    if(i != array.length-1) {
     sb.append(", ");
    }
   }
   return sb.toString();
}
}

排序過程

希爾排序的過程如下:

首先初始化間隔d為待排序數(shù)組的長度,無需排序。

減小d,對于每次得到的間隔d,執(zhí)行多組排序,使得原始數(shù)組間隔為d的一個子數(shù)組為有序,該數(shù)組通過類似直接插入排序的算法來執(zhí)行排序。

直到,d減小為1的時候,整個數(shù)組為有序。這里,采用二分的策略來得到間隔d。

執(zhí)行希爾排序的過程示例如下:

假設(shè)待排序數(shù)組為array = {94,12,34,76,26,9,0,37,55,76,37,5,68,83,90,37,12,65,76,49},數(shù)組大小為20。

首先,初始化d = 20。在循環(huán)中反復(fù)得到間隔d,根據(jù)d執(zhí)行一趟希爾排序。

對于d = 20/2 = 10:

根據(jù)d = 10來對數(shù)組排序,將原始數(shù)組分成2塊: {94,12,34,76,26,9,0,37,55,76}與{37,5,68,83,90,37,12,65,76,49},也就是對如下數(shù)組分別進(jìn)行直接插入排序:

{array[0],array[10]} = {94,37}

{array[1],array[11]} = {12,5}

{array[2],array[12]} = {34,68}

{array[3],array[13]} = {76,83}

{array[4],array[14]} = {26,90}

{array[5],array[15]} = {9,37}

{array[6],array[16]} = {0,12}

{array[7],array[17]} = {37,65}

{array[8],array[18]} = {55,76}

{array[9],array[19]} = {76,49}

第一趟希爾排序后,各個子數(shù)組變?yōu)椋?/p>

{37,5,34,76,26,9,0,37,55,49}與{94,12,68,83,90,37,12,65,76,76},

即:array = {37,5,34,76,26,9,0,37,55,49,94,12,68,83,90,37,12,65,76,76},

對于d = 10/2 = 5:

根據(jù)d = 5來對數(shù)組排序,將第一趟希爾排序后的數(shù)組分成4塊 :{37,5,34,76,26}、{9,0,37,55,49}、{94,12,68,83,90}與{37,12,65,76,76},也就是對如下數(shù)組分別進(jìn)行直接插入排序:

{array[0],array[5],array[10],array[15]} = {37,9,94,37}

{array[1],array[6],array[11],array[16]} = {5,0,12,12}

{array[2],array[7],array[12],array[17]} = {34,37,68,65}

{array[3],array[8],array[13],array[18]} = {76,55,83,76}

{array[4],array[9],array[14],array[19]} = {26,49,90,76}

第二趟希爾排序后,各個子數(shù)組變?yōu)椋?/p>

{9,0,34,55,26}、{37,5,37,76,49}、{37,12,65,76,76}與{94,12,68,83,90},

即:array = {9,0,34,55,26,37,5,37,76,49,37,12,65,76,76,94,12,68,83,90}。

對于d = 5/2 = 2:

根據(jù)d = 2來對數(shù)組排序,將第二趟希爾排序后的數(shù)組分成10塊: {9,0}、{34,55}、{26,37}、{5,37}、{76,49}、{37,12}、{65,76}、{76,94}、{12,68}與{83,90},也就是對如下數(shù)組分別進(jìn)行直接插入排序:

{array[0],array[2],array[4],array[6],array[8],array[10],array[12],array[14],array[16],array[18]} = {9,34,26,5,76,37,65,76,12,83}

{array[1],array[3],array[5],array[7],array[9],array[11],array[13],array[15],array[17],array[19]} = {0,55,37,37,49,12,76,94,68,90}

第三趟希爾排序后,各個子數(shù)組變?yōu)椋簕5,0}、{9,12}、{12,37}、{26,37}、{34,49}、{37,55}、{65,68}、{76,76}、{76,90}與{83,94},

即:array = :{5,0,9,12,12,37,26,37,34,49,37,55,65,68,76,76,76,90,83,94}。

對于d = 2/2 = 1:

根據(jù)d = 1來對數(shù)組排序,將第二趟希爾排序后的數(shù)組分成20塊:{5}、{0}、{9}、{12}、{12}、{37}、{26}、{37}、{34}、{49}、{37}、{55}、{65}、{68}、{76}、{76}、{76}、{90}、{83}、{94},也就是對如下數(shù)組分別進(jìn)行直接插入排序:

{5,0,9,12,12,37,26,37,34,49,37,55,65,68,76,76,76,90,83,94}

第四趟希爾排序以后,數(shù)組已經(jīng)有序:

array = {0,5,9,12,12,26,34,37,37,37,49,55,65,68,76,76,76,83,90,94}。

因?yàn)?d= 1,希爾排序結(jié)束。

測試用例

package org.shirdrn.internal.sort;

import junit.framework.TestCase;

public class TestShellSort extends TestCase {

private ShellSort sort;
private Integer[] array;

@Override
protected void setUp() throws Exception {
   array = new Integer[]{
     94,12,34,76,26,9,0,37,55,76,37,5,68,83,90,37,12,65,76,49
   };
   sort = new ShellSort(array);
}

public void testSort() {
   // B(Before),A(After)
   System.out.println("(B)Sorting : " + this.sort.print());
   this.sort.sort();
   System.out.println("(A)Sorting : " + this.sort.print());
}
}

測試結(jié)果:

(B)Sorting : 94, 12, 34, 76, 26, 9, 0, 37, 55, 76, 37, 5, 68, 83, 90, 37, 12, 65, 76, 49
(A)Sorting : 0, 5, 9, 12, 12, 26, 34, 37, 37, 37, 49, 55, 65, 68, 76, 76, 76, 83, 90, 94

算法分析

(一)時間復(fù)雜度

Shell排序的執(zhí)行時間依賴于增量序列。

好的增量序列的共同特征:

① 最后一個增量必須為1;

② 應(yīng)該盡量避免序列中的值(尤其是相鄰的值)互為倍數(shù)的情況。

有人通過大量的實(shí)驗(yàn),給出了目前較好的結(jié)果:當(dāng)n較大時,比較和移動的次數(shù)約在nl.25到1.6n1.25之間。

(二)空間復(fù)雜度

因?yàn)橄柵判蛞蕾囉谠隽啃蛄校瑥亩鴮?dǎo)致排序的趟數(shù)不固定,對于不同的增量執(zhí)行一趟希爾排序,只用到一個輔助變量。

(三)排序穩(wěn)定性

通過上述元素76可以看到,希爾排序不穩(wěn)定。

因此,希爾排序是不穩(wěn)定的。

posted on 2010-11-01 18:06 葉子 閱讀(973) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            亚洲综合日韩在线| 久久人人97超碰国产公开结果| 一区二区三区四区五区在线| 国产欧美日韩视频一区二区三区| 夜夜爽99久久国产综合精品女不卡| 国内精品美女在线观看| 欧美精品色网| 奶水喷射视频一区| 老妇喷水一区二区三区| 久久免费99精品久久久久久| 免费亚洲一区| 美女精品自拍一二三四| 欧美一区二区三区的| 性欧美大战久久久久久久久| 亚洲午夜精品17c| 欧美一区二区三区四区视频| 欧美一区2区视频在线观看| 亚洲免费影视| 欧美一区二区三区婷婷月色| 午夜在线一区| 欧美激情网站在线观看| 欧美日韩一区二区在线观看视频| 欧美日韩亚洲一区二区| 国产精品久久久久aaaa| 黄色成人在线观看| 老司机免费视频久久| 亚洲精品一区二区网址| 国产精品在线看| 一区二区三区**美女毛片| 久久国产直播| 亚洲国产成人不卡| 亚洲小说春色综合另类电影| 午夜精品福利在线| 久久久999精品| 女人香蕉久久**毛片精品| 欧美香蕉视频| 亚洲成在人线av| 久久精品国产精品亚洲精品| 快播亚洲色图| 91久久国产精品91久久性色| 在线一区视频| 久久av红桃一区二区小说| 欧美女同在线视频| 香蕉亚洲视频| 夜夜躁日日躁狠狠久久88av| 久久嫩草精品久久久精品一| 影音先锋久久资源网| 亚洲午夜精品国产| 亚洲人午夜精品| 久久成人精品| 欧美成在线视频| 免费观看亚洲视频大全| 国产曰批免费观看久久久| 午夜亚洲激情| 久久爱www久久做| 久久亚洲欧美国产精品乐播| 精品成人一区| 99这里只有精品| 黄色成人在线网址| 亚洲黑丝在线| 国产日韩视频| 国内成人精品一区| 欧美国产精品劲爆| 国产精品久久久久永久免费观看| 欧美一级大片在线免费观看| 久久五月天婷婷| 欧美一区二区在线视频| 欧美精品一区在线发布| 久久久之久亚州精品露出| 久久亚洲国产精品日日av夜夜| 亚洲夜晚福利在线观看| 欧美日本一区二区高清播放视频| 久久婷婷亚洲| 国产午夜精品一区二区三区欧美 | 国产日产亚洲精品| 99热这里只有精品8| 日韩特黄影片| 欧美gay视频| 久久黄色级2电影| 国产精品久久久久久久久搜平片| 老司机精品导航| 在线看不卡av| 久久国产福利国产秒拍| 久久精品国产亚洲精品| 国产一区二区在线免费观看| 欧美日韩午夜在线| 久久久蜜臀国产一区二区| 亚洲激情综合| 国产一区二区精品丝袜| 欧美一区二区三区四区高清 | 亚洲一区二区三区在线播放| 亚洲第一精品在线| 美女精品网站| 欧美怡红院视频| 亚洲午夜精品一区二区三区他趣 | 国产一区久久| 亚洲一区二区精品在线观看| 亚洲精品免费看| 欧美日韩不卡| 亚洲毛片网站| 羞羞答答国产精品www一本| 国产精品羞羞答答| 久久精品国产免费| 亚洲日本中文字幕区| 亚洲线精品一区二区三区八戒| 欧美亚男人的天堂| 久久精品人人做人人综合 | 日韩亚洲国产精品| 亚洲与欧洲av电影| 国一区二区在线观看| 亚洲二区在线视频| 欧美69wwwcom| 欧美gay视频激情| 好吊一区二区三区| 久久久久久久久久看片| 女人色偷偷aa久久天堂| 久久一区二区三区四区五区| 国产一区二区毛片| 久久精品国产亚洲5555| 亚洲一区免费视频| 午夜久久影院| 久久久久久久久久看片| 裸体素人女欧美日韩| 亚洲精品亚洲人成人网| 亚洲曰本av电影| 欧美激情视频在线播放| 久久精品二区| 亚洲免费在线观看| 亚洲综合国产精品| 亚洲一区亚洲二区| 亚洲图片欧洲图片av| 亚洲欧美日韩国产一区| 性做久久久久久| 一区二区三区产品免费精品久久75 | 美女性感视频久久久| 欧美一区亚洲| 久久国产日韩| 久久久亚洲国产天美传媒修理工 | 亚洲国产一区二区三区青草影视| 99精品视频网| 久久国产精品色婷婷| 欧美不卡视频一区| 国产精品任我爽爆在线播放 | 欧美自拍偷拍午夜视频| 久久久久久网址| 欧美日韩mv| 红桃视频国产精品| 亚洲影视在线| 国产一区二区三区免费观看| 亚洲破处大片| 久久国内精品视频| 亚洲日本电影| 久久国内精品自在自线400部| 欧美电影免费观看高清完整版| 欧美日韩在线一区| 亚洲精品国产精品国自产观看| 亚洲性色视频| 亚洲激情专区| 亚洲成色www8888| 久久久久久亚洲精品中文字幕 | 欧美激情精品久久久久久黑人| 日韩亚洲欧美一区| 免费黄网站欧美| 在线观看视频一区| 美日韩丰满少妇在线观看| 亚洲淫片在线视频| 国产色产综合产在线视频| 午夜精品久久久久久久99水蜜桃| 一区二区免费在线播放| 国产精品播放| 久久精品国产亚洲精品| 国产视频一区欧美| 欧美大片免费久久精品三p | 久久久噜噜噜久久中文字幕色伊伊| 在线综合视频| 国内成人精品2018免费看| 欧美激情2020午夜免费观看| 欧美激情第一页xxx| 久久精品女人的天堂av| 久久久久www| 亚洲美女视频在线免费观看| 亚洲香蕉伊综合在人在线视看| 国产精品日韩一区二区三区| 久久久久免费观看| 欧美日韩日本国产亚洲在线| 久久在线免费观看视频| 欧美视频在线播放| 另类激情亚洲| 亚洲欧美日韩电影| 欧美国产精品人人做人人爱| 性久久久久久| 欧美精品日韩| 免费视频亚洲| 激情欧美一区| 午夜精品一区二区三区四区| 一区二区三区四区五区视频| 欧美成人tv| 亚洲黄色在线观看| 99国产精品99久久久久久| 欧美一区二区三区在线观看|