Java 插入排序之希爾排序的實例
更新時間:2017年07月08日 14:58:38 投稿:lqh
這篇文章主要介紹了Java 插入排序之希爾排序的實例的相關(guān)資料,需要的朋友可以參考下
Java 插入排序之希爾排序的實例
Java代碼
/*希爾排序(Shell Sort)是插入排序的一種。其基本思想是:先取定一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1
* 個組,所有距離為d1的倍數(shù)的記錄放在同一個組中,在各個組中進行插入排序;然后,取第二個增量d2<d1,重復(fù)上述的分組和排序,
* 直至所取的增量dt=1(dt<dt-1<...<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。
* new int[]{8,5,1,7,9,4,6},開始分割集合的間隔長度為3的情況,[[6][3][0]比較排序后,[4]和[1]比較排序后,[5]和[2]比較排序后,
* 分割集合的間隔長度為1,這時[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;//分割集合的間隔長度
int pointer;//進行處理的位置
dataLength=arrayLength/2;//初始集合間隔長度
while(dataLength!=0){//數(shù)列仍可進行分割
//對各個集合進行處理
for(j=dataLength;j<arrayLength;j++){
isChange=false;
temp=intArray[j];//暫存,待交換值時用
pointer=j-dataLength;//計算進行處理的位置
//進行集合內(nèi)數(shù)值的比較與交換值
while(temp<intArray[pointer]&&pointer>=0&&pointer<arrayLength){
intArray[pointer+dataLength]=intArray[pointer];
//計算下一個欲進行處理的位置
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("指定分割集合的間隔長度為"+dataLength+",對各個集合進行處理后,Current sorting result: ");
for(k=0;k<arrayLength;k++)
System.out.print(" "+intArray[k]+" ");
System.out.println();
dataLength=dataLength/2;//計算下次分割的間隔長度
}
}
運行后的結(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 指定分割集合的間隔長度為3,對各個集合進行處理后,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 指定分割集合的間隔長度為1,對各個集合進行處理后,Current sorting result: 1 4 5 6 7 8 9
當分割的間隔為1時,變成了直接插入排序。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Mybatis如何實現(xiàn)關(guān)聯(lián)屬性懶加載
這篇文章主要介紹了Mybatis如何實現(xiàn)關(guān)聯(lián)屬性懶加載的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法
本篇文章主要介紹了SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
SpringCloud?openfeign聲明式服務(wù)調(diào)用實現(xiàn)方法介紹
在springcloud中,openfeign是取代了feign作為負載均衡組件的,feign最早是netflix提供的,他是一個輕量級的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負載均衡機制,因此feign可以作為一個負載均衡的遠程服務(wù)調(diào)用框架使用2022-12-12
Java數(shù)組使用binarySearch()方法查找指定元素的實現(xiàn)
這篇文章主要介紹了Java數(shù)組使用binarySearch()方法查找指定元素的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
java巧用@Convert實現(xiàn)表字段自動轉(zhuǎn)entity
本文主要介紹了java巧用@Convert實現(xiàn)表字段自動轉(zhuǎn)entity,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

