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

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

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

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

基本思想:

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

代碼實現:

  1. public class Test {   
  2. public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 預設數據數組   
  3. public static void main(String args[]) {   
  4. int i; // 循環計數變量   
  5. int Index = a.length;// 數據索引變量   
  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. // 排序后結果   
  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; // 循環計數變量   
  19. int Temp; // 暫存變量   
  20. boolean Change; // 數據是否改變   
  21. int DataLength; // 分割集合的間隔長度   
  22. int Pointer; // 進行處理的位置   
  23. DataLength = (int) Index / 2; // 初始集合間隔長度   
  24. while (DataLength != 0) // 數列仍可進行分割   
  25. {   
  26. // 對各個集合進行處理   
  27. for (j = DataLength; j &lt; Index; j++) {   
  28. Change = false;   
  29. Temp = a[j]; // 暫存Data[j]的值,待交換值時用   
  30. Pointer = j - DataLength; // 計算進行處理的位置   
  31. // 進行集合內數值的比較與交換值   
  32. while (Temp &lt; a[Pointer] && Pointer >= 0 && Pointer &lt;= Index) {   
  33. a[Pointer + DataLength] = a[Pointer];   
  34. // 計算下一個欲進行處理的位置   
  35. PointerPointer = Pointer - DataLength;   
  36. Change = true;   
  37. if (Pointer &lt; 0 || Pointer > Index)   
  38. break;   
  39. }   
  40. // 與最后的數值交換   
  41. a[Pointer + DataLength] = Temp;   
  42. if (Change) {   
  43. // 打印目前排序結果   
  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; // 計算下次分割的間隔長度   
  51. }   
  52. }   

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

【編輯推薦】

  1. 何時創建Java對象實例
  2. 經典四講貫通C++排序之二 希爾排序
  3. Java Web應用開發中的一些概念解讀

 

責任編輯:于鐵 來源: 百度
相關推薦

2022-03-12 20:12:08

希爾排序數組插入排序

2011-04-20 13:56:08

選擇排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2023-03-06 08:10:52

數據結構算法數據

2023-10-07 00:11:37

希爾排序算法

2011-04-20 12:49:44

插入排序

2011-04-20 14:29:07

歸并排序

2011-04-20 16:05:15

基數排序

2011-04-11 14:21:43

希爾排序排序C++

2019-09-17 16:30:18

java排序算法

2015-08-26 10:13:55

排序算法總結

2021-01-26 05:33:07

排序算法快速

2015-09-01 10:21:53

排序算法總結

2023-10-05 09:01:05

插入排序對象序列log2i

2021-06-24 17:55:40

Python 開發編程語言

2022-01-06 16:20:04

Java排序算法排序

2021-10-15 09:43:12

希爾排序復雜度

2021-01-19 07:02:26

算法數據結構堆排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久在线视频 | 国产精品久久久久久久粉嫩 | 国产一级片精品 | a免费观看| 色嗨嗨 | 国产中文视频 | 精品日韩一区二区 | 一色桃子av一区二区 | 久久精品69 | 日韩激情在线 | 日韩综合在线 | 成人亚洲视频 | 久久国产精品偷 | 999久久久久久久 | 国产成人精品一区 | 中文字幕av一区 | 97超级碰碰 | 国产精品区二区三区日本 | 久久精品色欧美aⅴ一区二区 | 日日操操| 国产精品久久久久久久久久久久 | 国产精品久久av | 欧美成人精品一区二区男人看 | 国产高清视频一区二区 | 黄网站涩免费蜜桃网站 | 国产一级一级毛片 | 亚洲精品日韩在线 | 久久99精品久久久 | 国产亚洲精品久久情网 | 欧美成人精品激情在线观看 | 亚洲欧美日本在线 | 午夜视频在线观看视频 | 欧美炮房 | caoporn视频在线 | 欧美视频1区 | 国产精品黄色 | 成人综合久久 | 欧美成人精品一区二区男人看 | 九九综合 | 成人黄色av网址 | 91亚洲国产成人久久精品网站 |