日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【十大经典排序算法】java实现--希尔排序(4)

發(fā)布時(shí)間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【十大经典排序算法】java实现--希尔排序(4) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

希爾排序概述: 先將整個(gè)待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄"基本有序"時(shí),再對(duì)全體記錄進(jìn)行依次直接插入排序。

  • 選擇一個(gè)增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1
  • 按增量序列個(gè)數(shù) k,對(duì)序列進(jìn)行 k 趟排序
  • 每趟排序,根據(jù)對(duì)應(yīng)的增量 ti,將待排序列分割成若干長度為 m 的子序列,分別對(duì)各子表進(jìn)行直接插入排序。僅增量因子為 1 時(shí),整個(gè)序列作為一個(gè)表來處理,表長度即為整個(gè)序列的長度。
public class ArrayDemo {/*希爾排序:先將整個(gè)待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄"基本有序"時(shí),再對(duì)全體記錄進(jìn)行依次直接插入排序。 */public static void main(String[] args) {//定義一個(gè)數(shù)組int[] arr = {24, 69, 80, 57, 13};System.out.println("排序前:" + arrayToString(arr));int gap = 1;while (gap < arr.length) {gap = gap * 3 + 1;}while (gap > 0) {for (int i = gap; i < arr.length; i++) {int tmp = arr[i];int j = i - gap;while (j >= 0 && arr[j] > tmp) {arr[j + gap] = arr[j];j -= gap;}arr[j + gap] = tmp;}gap = (int) Math.floor(gap / 3);}System.out.println("排序后:" + arrayToString(arr));}//把數(shù)組中的元素按照指定的規(guī)則組成一個(gè)字符串:[元素1, 元素2, ...]public static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");String s = sb.toString();return s;}}

輸出結(jié)果

總結(jié)

以上是生活随笔為你收集整理的【十大经典排序算法】java实现--希尔排序(4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。