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

源代碼
package com.zc.manythread;
/**
*
* @author 偶my耶
*
*/
public class ShellSort {
public static int count = 0;
public static void shellSort(int[] data) {
// 計(jì)算出最大的h值
int h = 1;
while (h <= data.length / 3) {
h = h * 3 + 1;
}
while (h > 0) {
for (int i = h; i < data.length; i += h) {
if (data[i] < data[i - h]) {
int tmp = data[i];
int j = i - h;
while (j >= 0 && data[j] > tmp) {
data[j + h] = data[j];
j -= h;
}
data[j + h] = tmp;
print(data);
}
}
// 計(jì)算出下一個(gè)h值
h = (h - 1) / 3;
}
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
public static void main(String[] args) {
int[] data = new int[] { 4, 3, 6, 2, 1, 9, 5, 8, 7 };
print(data);
shellSort(data);
print(data);
}
}
運(yùn)行結(jié)果:

Shell排序是不穩(wěn)定的,它的空間開(kāi)銷(xiāo)也是O(1),時(shí)間開(kāi)銷(xiāo)估計(jì)在O(N3/2)~O(N7/6)之間
- java 中基本算法之希爾排序的實(shí)例詳解
- java數(shù)據(jù)結(jié)構(gòu)與算法之希爾排序詳解
- Java經(jīng)典排序算法之希爾排序詳解
- java 算法之希爾排序詳解及實(shí)現(xiàn)代碼
- 使用Java實(shí)現(xiàn)希爾排序算法的簡(jiǎn)單示例
- 細(xì)致解讀希爾排序算法與相關(guān)的Java代碼實(shí)現(xiàn)
- Java實(shí)現(xiàn)八個(gè)常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等
- Java排序算法總結(jié)之希爾排序
- java實(shí)現(xiàn)希爾排序算法
- 圖解排序算法之希爾排序Java實(shí)現(xiàn)
相關(guān)文章
SpringMVC框架如何與Junit整合看這個(gè)就夠了
這篇文章主要介紹了SpringMVC框架如何與Junit整合看這個(gè)就夠了,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
SpringBoot整合Mybatis與druid實(shí)現(xiàn)流程詳解
這篇文章主要介紹了springboot整合mybatis plus與druid詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的下伙伴可以參考一下2022-10-10
Java漢字轉(zhuǎn)成漢語(yǔ)拼音工具類(lèi)
這篇文章主要為大家詳細(xì)介紹了Java漢字轉(zhuǎn)成漢語(yǔ)拼音工具類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Mybatis與Jpa的區(qū)別和性能對(duì)比總結(jié)
mybatis和jpa兩個(gè)持久層框架,從底層到用法都不同,但是實(shí)現(xiàn)的功能是一樣的,所以說(shuō)一直以來(lái)頗有爭(zhēng)議,所以下面這篇文章主要給大家介紹了關(guān)于Mybatis與Jpa的區(qū)別和性能對(duì)比的相關(guān)資料,需要的朋友可以參考下2021-06-06
mybatis使用foreach語(yǔ)句實(shí)現(xiàn)IN查詢(xún)(三種)
這篇文章主要介紹了mybatis使用foreach語(yǔ)句實(shí)現(xiàn)IN查詢(xún)(三種),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Spring復(fù)雜對(duì)象創(chuàng)建的方式小結(jié)
這篇文章主要介紹了Spring復(fù)雜對(duì)象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類(lèi)型的對(duì)象?Spring中提供了三種方法來(lái)創(chuàng)建復(fù)雜對(duì)象,需要的朋友可以參考下2022-01-01

