Java 插入排序之希爾排序的實(shí)例
Java 插入排序之希爾排序的實(shí)例
Java代碼
/*希爾排序(Shell Sort)是插入排序的一種。其基本思想是:先取定一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分成d1
* 個(gè)組,所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中,在各個(gè)組中進(jìn)行插入排序;然后,取第二個(gè)增量d2<d1,重復(fù)上述的分組和排序,
* 直至所取的增量dt=1(dt<dt-1<...<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?
* new int[]{8,5,1,7,9,4,6},開始分割集合的間隔長(zhǎng)度為3的情況,[[6][3][0]比較排序后,[4]和[1]比較排序后,[5]和[2]比較排序后,
* 分割集合的間隔長(zhǎng)度為1,這時(shí)[1]和[0]比較排序后,[2][1][0]....,和直接插入排序一樣了。*/
public static void shellSort(int[] intArray) {
System.out.print("將要排序的數(shù)組為: ");
for(int k=0;k<intArray.length;k++)
System.out.print(" "+intArray[k]+" ");
System.out.println();
int arrayLength=intArray.length;
int j,k;//循環(huán)變量
int temp;//暫存變量
boolean isChange;//數(shù)據(jù)是否改變
int dataLength;//分割集合的間隔長(zhǎng)度
int pointer;//進(jìn)行處理的位置
dataLength=arrayLength/2;//初始集合間隔長(zhǎng)度
while(dataLength!=0){//數(shù)列仍可進(jìn)行分割
//對(duì)各個(gè)集合進(jìn)行處理
for(j=dataLength;j<arrayLength;j++){
isChange=false;
temp=intArray[j];//暫存,待交換值時(shí)用
pointer=j-dataLength;//計(jì)算進(jìn)行處理的位置
//進(jìn)行集合內(nèi)數(shù)值的比較與交換值
while(temp<intArray[pointer]&&pointer>=0&&pointer<arrayLength){
intArray[pointer+dataLength]=intArray[pointer];
//計(jì)算下一個(gè)欲進(jìn)行處理的位置
pointer=pointer-dataLength;
isChange=true;
System.out.print("every changing result: ");
for(k=0;k<arrayLength;k++)
System.out.print(" "+intArray[k]+" ");
System.out.println();
if(pointer<0||pointer>arrayLength)
break;
}
//與最后的數(shù)值交換
intArray[pointer+dataLength]=temp;
if(isChange){
System.out.print("Current sorting result: ");
for(k=0;k<arrayLength;k++)
System.out.print(" "+intArray[k]+" ");
System.out.println();
}
}
System.out.print("指定分割集合的間隔長(zhǎng)度為"+dataLength+",對(duì)各個(gè)集合進(jìn)行處理后,Current sorting result: ");
for(k=0;k<arrayLength;k++)
System.out.print(" "+intArray[k]+" ");
System.out.println();
dataLength=dataLength/2;//計(jì)算下次分割的間隔長(zhǎng)度
}
}
運(yùn)行后的結(jié)果為:
Java代碼
將要排序的數(shù)組為: 8 5 1 7 9 4 6 every changing result: 8 5 1 8 9 4 6 Current sorting result: 7 5 1 8 9 4 6 every changing result: 7 5 1 8 9 4 8 every changing result: 7 5 1 7 9 4 8 Current sorting result: 6 5 1 7 9 4 8 指定分割集合的間隔長(zhǎng)度為3,對(duì)各個(gè)集合進(jìn)行處理后,Current sorting result: 6 5 1 7 9 4 8 every changing result: 6 6 1 7 9 4 8 Current sorting result: 5 6 1 7 9 4 8 every changing result: 5 6 6 7 9 4 8 every changing result: 5 5 6 7 9 4 8 Current sorting result: 1 5 6 7 9 4 8 every changing result: 1 5 6 7 9 9 8 every changing result: 1 5 6 7 7 9 8 every changing result: 1 5 6 6 7 9 8 every changing result: 1 5 5 6 7 9 8 Current sorting result: 1 4 5 6 7 9 8 every changing result: 1 4 5 6 7 9 9 Current sorting result: 1 4 5 6 7 8 9 指定分割集合的間隔長(zhǎng)度為1,對(duì)各個(gè)集合進(jìn)行處理后,Current sorting result: 1 4 5 6 7 8 9
當(dāng)分割的間隔為1時(shí),變成了直接插入排序。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Mybatis如何實(shí)現(xiàn)關(guān)聯(lián)屬性懶加載
這篇文章主要介紹了Mybatis如何實(shí)現(xiàn)關(guān)聯(lián)屬性懶加載的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法
本篇文章主要介紹了SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
在Spring Boot項(xiàng)目中引入本地JAR包的步驟和配置
本文探討了在Spring Boot項(xiàng)目中引入本地JAR包的步驟和必要的配置,通過使用Maven的system作用域,開發(fā)者可以將自定義的本地庫(kù)或功能集成到Spring Boot應(yīng)用程序中,,需要的朋友可以參考下2023-10-10
SpringCloud?openfeign聲明式服務(wù)調(diào)用實(shí)現(xiàn)方法介紹
在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個(gè)輕量級(jí)的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個(gè)負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用2022-12-12
如何解決java:錯(cuò)誤:無效的源發(fā)行版:16
這篇文章主要介紹了如何解決java:錯(cuò)誤: 無效的源發(fā)行版:16問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
JAVA操作MongoDB數(shù)據(jù)庫(kù)實(shí)例教程
MongoDB是一個(gè)文檔型數(shù)據(jù)庫(kù),是NOSQL家族中最重要的成員之一,下面這篇文章主要給大家介紹了關(guān)于JAVA操作MongoDB數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn)
這篇文章主要介紹了Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
java巧用@Convert實(shí)現(xiàn)表字段自動(dòng)轉(zhuǎn)entity
本文主要介紹了java巧用@Convert實(shí)現(xiàn)表字段自動(dòng)轉(zhuǎn)entity,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

