圖解Java經(jīng)典算法希爾排序的原理與實現(xiàn)
希爾排序
希爾排序時插入排序的一種,也稱縮小增量排序,是直接插入排序的一種更高效的改進版本。希爾排序是非穩(wěn)定排序算法。
算法思想
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序,隨著增量逐漸減少,每組包含的數(shù)越來越多當增量減至1時,整個序列恰好被分成一組,算法完成。
我們以增序排序為例,希爾排序基本步驟:選擇初始增量gap=length/2,縮小增量繼續(xù)以gap=gap/2的方式進行,直到增量gap=1為止,增量的每次變化都會將原始序列劃分為若干組,分別對每一組進行插入排序,每一次通過增量劃分組進行插入排序宏觀上小的數(shù)移到了前面,大的數(shù)移到了后面,最后增量gap=1進行插入排序后就是最終的有序序列。下面以圖解的方式詳細介紹希爾排序算法的整個流程。
圖解

代碼實現(xiàn)(Java)
public class ShellSort {
public static void main(String[] args){
int[] array = {86,11,54,34,53,12,45,81,19,65};
int gap = array.length;
while (true) {
gap /= 2; //增量每次減半
for (int i = 0; i < gap; i++) {
for (int j = i + gap; j < array.length; j += gap) {//這個循環(huán)里其實就是一個插入排序
int k = j - gap;
while (k >= 0 && array[k] > array[k+gap]) {
int temp = array[k];
array[k] = array[k+gap];
array[k + gap] = temp;
k -= gap;
}
}
}
if (gap == 1)
break;
}
System.out.println("排序結果:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
//排序前:{86,11,54,34,53,12,45,81,19,65}
//排序后:{11,12,19,34,45,53,54,65,81,86}
到此這篇關于圖解Java經(jīng)典算法希爾排序的原理與實現(xiàn)的文章就介紹到這了,更多相關Java希爾排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Security基于json登錄實現(xiàn)過程詳解
這篇文章主要介紹了Spring Security基于json登錄實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
關于Java實現(xiàn)HttpServer模擬前端接口調(diào)用
這篇文章主要介紹了關于Java實現(xiàn)Http?Server模擬前端接口調(diào)用,Http?協(xié)議是建立在?TCP?協(xié)議之上的協(xié)議,所以能用?TCP?來自己模擬一個簡單的?Http?Server?當然是可以的,需要的朋友可以參考下2023-04-04
在SpringBoot中整合數(shù)據(jù)源的示例詳解
這篇文章主要介紹了在SpringBoot中如何整合數(shù)據(jù)源,本文介紹了如何在SpringBoot項目中整合常見的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源,需要的朋友可以參考下2023-06-06
IDEA項目啟動時Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案
面對IDEA項目啟動時報出的Flyway遷移校驗和不匹配問題,核心在于保持遷移腳本的一致性、正確管理和理解Flyway的工作機制,本文介紹IDEA項目啟動時Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案,感興趣的朋友一起看看吧2024-01-01

