亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 邏輯算法 > 正文

PHP 排序算法之希爾排序

2020-03-22 16:21:44
字體:
供稿:網(wǎng)友
希爾排序之交換排序

● 問題引入:

在插入排序中,如果數(shù)組元素的排列情況比較樂觀,那么插入的次數(shù)就比較少,那么效率就很高了,可是很多時候,數(shù)據(jù)就是那么的不敬人意,比如如下的一個待 /

排序的數(shù)組:[2,3,4,5,6,7,1],這個數(shù)組,如果使用插入排序,那么就會發(fā)生如下的樣子:

1. 第一輪:[2,3,4,5,6,7,7]

2. 第二輪:[2,3,4,5,6,6,7]

3. 第三輪:[2,3,4,5,5,6,7]

4. 第四輪:[2,3,4,4,5,6,7]

5. 第五輪:[2,3,3,4,5,6,7]

6. 第六輪:[2,2,3,4,5,6,7]

7. 第七輪:[1,2,3,4,5,6,7]

這樣的就是最不樂觀的情況,很浪費時間,所以,后來就有大神研究了一下,優(yōu)化優(yōu)化,就發(fā)明了希爾排序。

希爾排序 (Shell's Sort) 是插入排序的一種又稱 “縮小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一種更高效的改進版本。

希爾排序是非穩(wěn)定排序算法。該方法因 D.L.Shell 于 1959 年提出而得名。

希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至 1 時,

整個文件恰被分成一組,算法便終止

● 數(shù)組實例說明:

1. 比如有一個待排序的數(shù)組 [9,6,1,3,0,5.7,2,8,4]

2. 上面的數(shù)組一共有 10 個元素,它把數(shù)組第一次分為 10/2 = 5 組,然后兩兩比較,大小位置交換:如下:

<?php$arr = [9,6,1,3,0, 5,7,2,8,4];$arr[0] > $arr[5] ? '交換位置,小數(shù)交換在前,大數(shù)交換在后' : '不交換位置';$arr[1] > $arr[6] ? '交換位置,小數(shù)交換在前,大數(shù)交換在后' : '不交換位置';$arr[2] > $arr[7] ? '交換位置,小數(shù)交換在前,大數(shù)交換在后' : '不交換位置';$arr[3] > $arr[8] ? '交換位置,小數(shù)交換在前,大數(shù)交換在后' : '不交換位置';$arr[4] > $arr[9] ? '交換位置,小數(shù)交換在前,大數(shù)交換在后' : '不交換位置';for ($i = 5; $i < 10; $i++) {     for ($j = $i - 5; $j >= 0; $j-=5) {         if ($data[$j] > $data[$j+5]) {         $temp = $data[$j];         $data[$j] = $data[$j+5];         $data[$j+5] = $temp;          }      } }

最后第一輪得到的結果就是:[5,6,1,3,0,9,7,2,8,4]

3. 第二輪又開始比較,第二輪是在之前第一輪的基礎上,再次分為 5/2 = 2 組,然后兩兩交換位置,大小指互換:如下:

<?php$arr = [5,6,1,3,0,9,7,2,8,4];$arr[0] > $arr[2];//1,5  [1,6,5,3,0,9,7,2,8,4]$arr[2] > $arr[4];//0,5  [1,6,0,3,5,9,7,2,8,4]$arr[4] > $arr[6];//5,7  [1,6,0,3,5,9,7,2,8,4]$arr[6] > $arr[8];//7,8  [1,6,0,3,5,9,7,2,8,4]$arr[1] > $arr[3];//3,6  [1,3,0,6,5,9,7,2,8,4]$arr[3] > $arr[5];//6,9  [1,3,0,6,5,9,7,2,8,4]$arr[5] > $arr[7];//2,9  [1,3,0,6,5,2,7,9,8,4]$arr[7] > $arr[9];//4,9  [1,3,0,6,5,2,7,4,8,9]...for ($i = 2; $i < 10; $i++) {     for ($j = $i - 2; $j >= 0; $j-=2) {         if ($data[$j] > $data[$j+2]) {         $temp = $data[$j];         $data[$j] = $data[$j+2];         $data[$j+2] = $temp;          }      } }

最后得到的結果就是:[0,2,1,3,6,4,7,6,8,9]

4. 最后再次分組比較:2/2 = 1 組。也就是最后,每兩個都要比較,然后再次互換位置

<?php$arr = [0,2,1,3,5,4,7,6,8,9];$arr[0] > $arr[1];//[1,3,0,6,5,2,7,4,8,9]$arr[1] > $arr[2];//[1,0,3,6,5,2,7,4,8,9]$arr[2] > $arr[3];//[1,0,3,6,5,2,7,4,8,9]$arr[3] > $arr[4];//[1,0,3,5,6,2,7,4,8,9]$arr[4] > $arr[5];//[1,0,3,5,2,6,7,4,8,9]$arr[5] > $arr[6];//[1,0,3,5,2,6,7,4,8,9]$arr[6] > $arr[7];//[1,0,3,5,2,6,4,7,8,9]$arr[7] > $arr[8];//[1,0,3,5,2,6,4,7,8,9]$arr[8] > $arr[9];//[1,0,3,5,2,6,4,7,8,9]...for ($i = 1; $i < 10; $i++) {     for ($j = $i - 1; $j >= 0; $j-=1) {         if ($data[$j] > $data[$j+1]) {          $temp = $data[$j];          $data[$j] = $data[$j+1];         $data[$j+1] = $temp;         }     } }

最后就得到結果:[0,1,2,3,4,5,6,7,8,9]

● 完整代碼如下:

<?phphtml' target='_blank'>class ShellSort{ /*** Notes: 希爾排序之交換法排序 * User: LiYi/ * Date: 2019/11/12 0012/ * Time: 14:30/ * @param array $data/ * @return array/ *// public static function shellSortArray(array $data):array { if (!is_array($data)) { return ['message' => '必須傳入數(shù)組比較排序']; } $count = count($data);//得到數(shù)組的個數(shù) //如果數(shù)組的個數(shù)小于等于1就直接返回 if ($count <= 1) {return $data;} //$gap 是每次減半的分組,直到只可以分為一組結束,在php里面需要注意,兩個整數(shù)相除,除不盡的情況下,得到的是一個浮點數(shù),不是一個向下 //取整的的整數(shù),所以在最后判斷gap 退出循環(huán)的時候,需要判斷它 >= 1 for ($gap = $count / 2; $gap >= 1; $gap /= 2) {         for ($i = $gap; $i < $count; $i++) {             for ($j = $i - $gap; $j >= 0; $j-=$gap) {                 if ($data[$j] > $data[$j+$gap]) {                 //這個地方是比較第一個數(shù)和它的步長做比較,交換也是一樣                 $temp = $data[$j];                  $data[$j] = $data[$j+$gap];                 $data[$j+$gap] = $temp;                 }             }         }     }     return $data; } public static function validate(array $data) {      if (!is_array($data)) {      return ['message' => '必須傳入數(shù)組比較排序'];     } $count = count($data);//得到數(shù)組的個數(shù) //如果數(shù)組的個數(shù)小于等于1就直接返回 if ($count <= 1){ return $data; } return [$data, $count]; } /**/ * Notes: 希爾排序之移位法排序 * User: LiYi * Date: 2019/11/12 0012 * Time: 14:29 * @param array $data * @return array*/ public static function ShellSortMoveArray(array $data) { $count = count($data);//得到數(shù)組總數(shù) for ($gap = $count / 2; $gap > 0; $gap /= 2) { //縮小增量,每次減半 $gap = floor($gap); for ($i = $gap; $i < $count; $i++) { // $insertIndex = $i;//待插入元素的下表 $insertValue = $data[$insertIndex];//待插入元素的值 echo "insertIndex=$insertIndex" . PHP_EOL; echo "insertValue=$insertValue" . PHP_EOL; if ($data[$insertIndex] < $data[$insertIndex - $gap]) { //判斷待插入元素和它步長的元素比較,待插入元素小就進入循環(huán) //判斷是否越界了,第一個元素的下標是要大于等于0的,否則退出循環(huán) //判斷后面的元素比前面的元素小,進入循環(huán),否則退出循環(huán) while ($insertIndex - $gap >= 0 && $insertValue < $data[$insertIndex - $gap]) { //把步長前面的大的值向后移動 $data[$insertIndex] = $data[$insertIndex - $gap]; $insertIndex -= $gap;//每循環(huán)一次就把帶插入的坐標減去補償/ } //把帶插的小值插入到前面 $data[$insertIndex] = $insertValue; } } } return $data; } public static function testShellOne(array $data) { $temp = 0; $count = count($data); for ($i = 5; $i < $count; $i++) { for ($j = $i - 5; $j >= 0; $j-=5) { if ($data[$j] > $data[$j+5]) { $temp = $data[$j]; $data[$j] = $data[$j+5]; $data[$j+5] = $temp; } } } for ($i = 2; $i < $count; $i++) { for ($j = $i - 2; $j >= 0; $j-=2) { if ($data[$j] > $data[$j+2]) { $temp = $data[$j]; $data[$j] = $data[$j+2]; $data[$j+2] = $temp;  }  }   } for ($i = 1; $i < 10; $i++) { for ($j = $i - 1; $j >= 0; $j-=1) { if ($data[$j] > $data[$j+1]) { $temp = $data[$j]; $data[$j] = $data[$j+1]; $data[$j+1] = $temp; }  } } var_dump($data); } }var_dump(ShellSort::shellSortMoveArray([0 => 9, 1 => 6, 2 => 1, 3 => 3, 4 => 0, 5 => 5, 6 => 7, 7 => 2, 8 => 8, 9 => 4]));// $gap = 10 / 2 = 5// $insertIndex  = $i = $gap = 5// $insertValue = $data[$insertIndex] = $data[5] = 5;// $data[$insertIndex] < $data[$insertIndex - $gap] == $data[5] < $data[5-5] = $data[0] ==> 5 < 9// while(5 - 5 >= 0 && 5 < 9) {//  $data[5] = $data[5-5] = $data[0] = 9//  $insertIndex -= 5 = 0;//}// $data[$insertIndex] = $data[0] = $insertValue = 5// $i++ = 6;// $insertIndex  = $i =  6// $insertValue = $data[$insertIndex] = $data[6] = 7;// $data[$insertIndex] < $data[$insertIndex - $gap] == $data[6] < $data[6-5] = $data[1] ==> 7 < 6// $i++ = 7;// $insertIndex  = $i =  7// $insertValue = $data[$insertIndex] = $data[7] = 2;// $data[$insertIndex] < $data[$insertIndex - $gap] == $data[7] < $data[7-5] = $data[2] ==> 2 < 1// $i++ = 8;// $insertIndex  = $i =  8// $insertValue = $data[$insertIndex] = $data[8] = 8;// $data[$insertIndex] < $data[$insertIndex - $gap] == $data[8] < $data[8-5] = $data[3] ==> 8 < 3// $i++ = 9;// $insertIndex  = $i =  9// $insertValue = $data[$insertIndex] = $data[9] = 4;// $data[$insertIndex] < $data[$insertIndex - $gap] == $data[9] < $data[9-5] = $data[4] ==> 4 < 0

以上就是PHP 排序算法之希爾排序的詳細內(nèi)容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
日韩免费在线观看av| 久久视频精品在线| 五月婷婷久久丁香| 欧美精品一区二区三区国产精品| 成人免费观看在线观看| 国产99精品在线观看| 国产在线色视频| 国产一区二区免费电影| 国产精品igao网网址不卡| 亚洲欧美日韩国产一区二区三区| 婷婷激情5月天| 国产精品久久久久永久免费观看| 九色porny自拍视频在线播放| www久久com| 欧美精品久久天天躁| 日韩免费观看高清| av漫画网站在线观看| 伊人久久大香线蕉综合网站| 欧美韩国一区二区| 国产成人自拍网| 成人手机在线播放| 色婷婷精品国产一区二区三区| wwwxx在线观看| 中文字幕一区二区日韩精品绯色| 亚洲一二区在线观看| 日韩欧国产精品一区综合无码| 久久亚洲国产精品一区二区| 91蝌蚪九色| 亚洲a区在线视频| 久草在线中文最新视频| 日韩精品福利一区二区三区| 高清av资源| 国产高清精品软男同| 精品国产乱码久久久久久夜甘婷婷| 黄色日本网站| 久久久久久久网站| 欧美激情一级精品国产| 日韩av在线不卡| 久久综合色一综合色88| 天堂а√在线8种子蜜桃视频| 男女啪啪999亚洲精品| 国产69精品久久久久久久久久| 亚洲精品视频在线观看网站| 国产成人午夜视频| 日韩在线欧美在线国产在线| 日韩一区二区免费视频| 亚洲中文一区二区三区| 久久久久成人精品无码中文字幕| 免费看日韩精品| 日韩美女国产精品| 精品国产国产综合精品| 国产经典欧美精品| 一本色道**综合亚洲精品蜜桃冫| 黑料吃瓜在线观看| 欧美超级乱淫片喷水| 手机在线中文字幕| 伊人影院在线播放| 久久久九九九热| 91成人免费电影| 成人欧美视频在线| 午夜精品久久久久久久99热影院| 手机在线一区二区三区| 高清久久精品| 国产精品乱码久久久久久| 黄色91视频| 国内精品久久久久久99蜜桃| 国产精品亲子伦av一区二区三区| 亚洲小说欧美另类婷婷| 色悠悠国产精品| 欧美日韩精品一区二区三区视频播放| 亚洲人成在线免费观看| 国产69视频在线观看| 国产日韩欧美一区二区三区综合| 在线影视一区二区三区| 国产成人精品123区免费视频| 岛国最新视频免费在线观看| 韩国日本一区二区三区| 国产精品99久久久久久有的能看| 日日噜噜噜噜久久久精品毛片| 一二三四在线观看免费高清中文在线观看| 国产又大又黄视频| www.成人网.com| 瑟瑟视频在线看| 亚洲福利精品视频| 欧美巨胸大乳hitomi| 国产无人区码熟妇毛片多| 深夜福利一区二区| 91沈先生播放一区二区| 成人18视频在线播放| 日韩在线一区二区视频| 国产精品人人爽人人爽| 久久免费区一区二区三波多野| 国产交换配乱淫视频免费| 国产精品国产三级国产a| 全球成人中文在线| 亚洲精品乱码久久久久久蜜桃91| 成人免费视频毛片| 中文字幕在线观看av| av一区二区三区免费| 免费一区二区| 2019中文在线观看| 精品国产乱码久久久久久108| 国产精品亚洲专一区二区三区| 欧美24videosex性欧美| 一级一片免费看| 色综合久久久久综合体| 日本精品免费观看高清观看| 青青草视频在线免费播放| 在线观看国产精品网站| 97av在线视频| 日韩影视精品| 日本裸体美女视频| 国产免费黄网站| 欧美成人国产精品高潮| 红桃视频亚洲| 欧美在线观看网址综合| 亚洲高清在线播放| 永久免费av网站| 日本一区二区在线观看视频| 色爱精品视频一区| av大片在线播放| 久久先锋影音| 国产精品日本精品| 亚洲一区视频在线观看视频| 欧洲一区二区在线观看| 亚洲区一区二区| 国产剧情久久久| 黄网在线播放| 久久综合五月| 亚洲欧美视频| 一区二区三区黄色片| 水蜜桃在线视频| 久久久久久久久久久久91| 亚洲在线免费播放| 久久成年人免费电影| 国产精品对白刺激久久久| avtt综合网| 在线碰免费视频在线观看| 不要播放器的av网站| 波多野结衣在线一区二区| www.av在线.com| 中文字幕一区二区三区有限公司| www.天天色| 影音先锋中文资源站| av在线一区二区| 日韩不卡在线视频| 91人人澡人人爽| 污视频网站免费在线观看| 99热手机在线| 久久精品国产欧美亚洲人人爽| 久久久久亚洲av片无码下载蜜桃| 国产h视频在线播放| 欧美一级片在线免费观看| 特级毛片在线免费观看| 夜级特黄日本大片_在线| 一区二区不卡在线观看| 污网站视频在线观看| 福利视频亚洲| 最新天堂在线视频| 91麻豆国产福利精品| 草莓视频性福宝| 自由日本语热亚洲人| 欧美精品1区2区| 少妇高潮在线观看| 精灵使的剑舞无删减版在线观看| 欧美激情第一区| 国产又粗又猛又爽又黄的视频一| 中文字幕在线观看的网站| 国产第100页| 久久综合九色综合网站| 欧美13~18sex性hd| 一区二区在线视频观看| 亚洲欧美乱综合图片区小说区| 福利精品视频| 美国一级黄色录像| 五月天国产在线| 国产区一区二| 99热在线观看精品| 欧美一区国产在线| 色综合久久久久综合体桃花网| 欧美一区二区.| 网站在线你懂的| 免费观看黄色一级视频| 国产在线视频一区二区| 久久亚洲精品国产亚洲老地址| 亚洲视频中文字幕在线观看| 亚洲欧美色图| 久久精品亚洲无码| 91精品天堂福利在线观看| 97精品人妻一区二区三区| 国产日韩高清在线| 国产色婷婷在线| 男人插入女人视频| 国产高清视频一区二区| 一本大道熟女人妻中文字幕在线| 国产精品白浆| 亚洲欧洲成人在线| 91在线精品视频| 欧美h片在线观看| 天天搞夜夜操| 国产在线欧美日韩| 亚洲国产日韩欧美在线图片| 日本人添下边视频免费| 久久一区二区电影| www.xxxx国产| 日韩视频专区| 欧美片网站yy| 99久久精品一区二区| 中文字幕日韩精品在线观看| 亚洲天堂成人网| 国产精品午夜一区二区欲梦| 欧美日韩国产二区| 91久久精品无码一区二区| 成人精品视频久久久久| 亚洲一区二区精品| 国产精品美女久久久久久不卡| 成人免费高清观看| 久久久亚洲影院你懂的| 欧美熟妇精品一区二区蜜桃视频| 欧美极品少妇与黑人| 国产精品第13页| 精品人妻一区二区三| 中文字幕亚洲图片| 中文字幕av专区| 户外露出精品视频国产| 精品久久久久久电影| 欧美日韩一区二区三区在线观看免| 国产老妇伦国产熟女老妇视频| 美女精品在线观看| 精品亚洲综合| 欧美videos另类齐全| 清纯唯美亚洲激情| 成年在线观看免费人视频| 蜜桃一区av| 中文字幕在线看精品乱码| 国产精品久久久久久久第一福利| 男人天堂新网址| 天天干天天曰天天操| 哺乳挤奶一区二区三区免费看| 1024手机看片国产| 欧美精选视频一区二区| 被陌生人带去卫生间啪到腿软| 欧美日韩影院| 一区二区三区中文字幕电影| 色哟哟在线观看视频| 亚洲97av| 在线综合视频播放| 国产成人在线观看网站| 欧洲精品一区二区三区久久| 日本三级免费观看| 国产欧美一区二区三区在线看蜜臂| 老牛国产精品一区的观看方式| 女厕盗摄一区二区三区| 久久中文字幕一区二区三区| 精品一区二区久久久久久久网站| 日韩乱码人妻无码中文字幕久久| 十大免费污污软件| 久久综合图片| 精品久久中文字幕久久av| 人成免费在线视频| 正在播放日韩精品| 亚洲精品美女久久久久| 亚洲一区二区三区四区五区黄| 99在线热播精品免费| 99在线精品观看| 久久久久99精品一区| 中文字幕欧美日本乱码一线二线| 亚洲欧美日韩精品久久久久| 粉嫩一区二区三区性色av| 中文字幕久久久久久久| 欧美综合国产| 国产1区2区3区在线| 理论片在线不卡免费观看| 日本wwwwwwwzzzzz视频| 成人精品一区二区三区电影| 色偷偷亚洲女人天堂观看欧| 亚洲欧美在线一区二区| 国产亚洲精品久久久久婷婷瑜伽| 久久人人爽亚洲精品天堂| 天天草天天草| 精品人妻一区二区三区香蕉| 亚洲天堂1区| 91影院在线播放| 亚洲性av网站| 亚洲图片综合网| 亚洲国产高清高潮精品美女| 精品不卡在线| 亚洲男同性恋视频| av电影免费在线| 蜜臀精品久久久久久蜜臀| 一本色道亚洲精品aⅴ| 99久久免费看精品国产一区| 美女视频黄频大全不卡视频在线播放| 日本wwwxxxx| 欧美性生交xxxxxdddd| 日韩中文视频| 中文字幕在线免费播放| 久久久噜噜噜久噜久久综合| 国产一区视频在线| 久久av中文字幕片| 欧美又粗又大又爽| 爱爱精品视频| 国产一级二级三级精品| 日韩中文字幕在线不卡| 国产精品国产高清国产| 久久av在线看| 四虎永久免费影库二三区| 午夜宅男在线视频| 高清免费成人av| 欧洲精品99毛片免费高清观看| juliaann成人作品在线看| 免费看欧美一级片| 一区二区成人在线观看| 在线免费不卡视频| 欧美亚洲国产一区| 欧美自拍第一页| 青青青国产在线视频| 91超碰caoporn97人人| 国产成人鲁色资源国产91色综| 天天干天天爽天天射| 91欧美一区二区三区| 97在线视频免费观看完整版| 欧美性猛交xxxx免费看蜜桃| 国产69精品久久久| 亚洲国产91精品在线观看| 国产成人综合欧美精品久久| 一区二区三区回区在观看免费视频| melody高清在线观看|