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

代碼實(shí)現(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) {//這個(gè)循環(huán)里其實(shí)就是一個(gè)插入排序
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("排序結(jié)果:");
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}
到此這篇關(guān)于圖解Java經(jīng)典算法希爾排序的原理與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java希爾排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Security基于json登錄實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Spring Security基于json登錄實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
關(guān)于Java實(shí)現(xiàn)HttpServer模擬前端接口調(diào)用
這篇文章主要介紹了關(guān)于Java實(shí)現(xiàn)Http?Server模擬前端接口調(diào)用,Http?協(xié)議是建立在?TCP?協(xié)議之上的協(xié)議,所以能用?TCP?來自己模擬一個(gè)簡(jiǎn)單的?Http?Server?當(dāng)然是可以的,需要的朋友可以參考下2023-04-04
在SpringBoot中整合數(shù)據(jù)源的示例詳解
這篇文章主要介紹了在SpringBoot中如何整合數(shù)據(jù)源,本文介紹了如何在SpringBoot項(xiàng)目中整合常見的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源,需要的朋友可以參考下2023-06-06
IDEA項(xiàng)目啟動(dòng)時(shí)Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案
面對(duì)IDEA項(xiàng)目啟動(dòng)時(shí)報(bào)出的Flyway遷移校驗(yàn)和不匹配問題,核心在于保持遷移腳本的一致性、正確管理和理解Flyway的工作機(jī)制,本文介紹IDEA項(xiàng)目啟動(dòng)時(shí)Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案,感興趣的朋友一起看看吧2024-01-01
springboot使用外置tomcat啟動(dòng)方式
這篇文章主要介紹了springboot使用外置tomcat啟動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

