成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java排序算法總結(jié)(四):希爾排序

開(kāi)發(fā) 后端 算法
希爾排序(Shell Sort)是插入排序的一種。是針對(duì)直接插入排序算法的改進(jìn)。該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。本文主要介紹希爾排序用Java是怎樣實(shí)現(xiàn)的。

希爾排序(縮小增量法) 屬于插入類排序,是將整個(gè)無(wú)序列分割成若干小的子序列分別進(jìn)行插入排序。希爾排序并不穩(wěn)定,O(1)的額外空間,時(shí)間復(fù)雜度為O(N*(logN)^2)。最壞的情況下的執(zhí)行效率和在平均情況下的執(zhí)行效率相比相差不多。

基本思想:

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

代碼實(shí)現(xiàn):

  1. public class Test {   
  2. public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 預(yù)設(shè)數(shù)據(jù)數(shù)組   
  3. public static void main(String args[]) {   
  4. int i; // 循環(huán)計(jì)數(shù)變量   
  5. int Index = a.length;// 數(shù)據(jù)索引變量   
  6. System.out.print("排序前: ");   
  7. for (i = 0; i &lt; Index - 1; i++)   
  8. System.out.printf("%3s ", a);   
  9. System.out.println("");   
  10. ShellSort(Index - 1); // 選擇排序   
  11. // 排序后結(jié)果   
  12. System.out.print("排序后: ");   
  13. for (i = 0; i &lt; Index - 1; i++)   
  14. System.out.printf("%3s ", a);   
  15. System.out.println("");   
  16. }   
  17. public static void ShellSort(int Index) {   
  18. int i, j, k; // 循環(huán)計(jì)數(shù)變量   
  19. int Temp; // 暫存變量   
  20. boolean Change; // 數(shù)據(jù)是否改變   
  21. int DataLength; // 分割集合的間隔長(zhǎng)度   
  22. int Pointer; // 進(jìn)行處理的位置   
  23. DataLength = (int) Index / 2; // 初始集合間隔長(zhǎng)度   
  24. while (DataLength != 0) // 數(shù)列仍可進(jìn)行分割   
  25. {   
  26. // 對(duì)各個(gè)集合進(jìn)行處理   
  27. for (j = DataLength; j &lt; Index; j++) {   
  28. Change = false;   
  29. Temp = a[j]; // 暫存Data[j]的值,待交換值時(shí)用   
  30. Pointer = j - DataLength; // 計(jì)算進(jìn)行處理的位置   
  31. // 進(jìn)行集合內(nèi)數(shù)值的比較與交換值   
  32. while (Temp &lt; a[Pointer] && Pointer >= 0 && Pointer &lt;= Index) {   
  33. a[Pointer + DataLength] = a[Pointer];   
  34. // 計(jì)算下一個(gè)欲進(jìn)行處理的位置   
  35. PointerPointer = Pointer - DataLength;   
  36. Change = true;   
  37. if (Pointer &lt; 0 || Pointer > Index)   
  38. break;   
  39. }   
  40. // 與最后的數(shù)值交換   
  41. a[Pointer + DataLength] = Temp;   
  42. if (Change) {   
  43. // 打印目前排序結(jié)果   
  44. System.out.print("排序中: ");   
  45. for (k = 0; k &lt; Index; k++)   
  46. System.out.printf("%3s ", a[k]);   
  47. System.out.println("");   
  48. }   
  49. }   
  50. DataLengthDataLength = DataLength / 2; // 計(jì)算下次分割的間隔長(zhǎng)度   
  51. }   
  52. }   

希爾排序幾乎沒(méi)有最壞情況,無(wú)論是正序、逆序、亂序,所用時(shí)間都不是很多,附加儲(chǔ)存是O(1),的確非常不錯(cuò)。在沒(méi)搞清楚快速排序、堆排序之前,它的確是個(gè)很好的選擇。希望能給你帶來(lái)幫助。

【編輯推薦】

  1. 何時(shí)創(chuàng)建Java對(duì)象實(shí)例
  2. 經(jīng)典四講貫通C++排序之二 希爾排序
  3. Java Web應(yīng)用開(kāi)發(fā)中的一些概念解讀

 

責(zé)任編輯:于鐵 來(lái)源: 百度
相關(guān)推薦

2022-03-12 20:12:08

希爾排序數(shù)組插入排序

2011-04-20 13:56:08

選擇排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 15:20:03

快速排序

2011-04-20 15:06:44

堆排序

2023-03-06 08:10:52

數(shù)據(jù)結(jié)構(gòu)算法數(shù)據(jù)

2023-10-07 00:11:37

希爾排序算法

2011-04-20 12:49:44

插入排序

2011-04-20 14:29:07

歸并排序

2011-04-20 16:05:15

基數(shù)排序

2011-04-11 14:21:43

希爾排序排序C++

2019-09-17 16:30:18

java排序算法

2015-08-26 10:13:55

排序算法總結(jié)

2021-01-26 05:33:07

排序算法快速

2015-09-01 10:21:53

排序算法總結(jié)

2023-10-05 09:01:05

插入排序對(duì)象序列log2i

2021-06-24 17:55:40

Python 開(kāi)發(fā)編程語(yǔ)言

2022-01-06 16:20:04

Java排序算法排序

2021-10-15 09:43:12

希爾排序復(fù)雜度

2021-01-19 07:02:26

算法數(shù)據(jù)結(jié)構(gòu)堆排序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 九九热精品在线 | 亚洲精品视频在线播放 | 亚洲第一色av | 一级黄色片一级黄色片 | 中文字幕视频在线观看 | 日韩综合 | 亚洲精品免费视频 | 在线观看免费观看在线91 | 欧美精品一区二区三区四区 在线 | 毛片a级| 国产一区二区不卡 | 天天搞天天操 | 狠狠插天天干 | 国产一区二区在线91 | 日韩一区二区免费视频 | 欧美精品网站 | 成人国产精品久久 | 久久青草av | av黄色免费在线观看 | 91精品国产综合久久香蕉922 | 久久久久久久久久久久久9999 | 国产精品久久久久久妇女 | 日日干夜夜操 | 国产福利网站 | 欧美日韩一 | 欧美影院| 精品日韩一区 | 久久99精品视频 | 免费一区在线 | 久久久久国产精品一区二区 | 91麻豆精品一区二区三区 | 玖玖视频网 | 日本一区二区高清不卡 | 免费在线看黄 | 在线观看中文字幕 | 日日草天天干 | 国产精品一区二区欧美黑人喷潮水 | 日韩欧美久久精品 | 欧美xxxx做受欧美 | 欧美日韩亚洲三区 | 精精国产xxxx视频在线野外 |