排序算法圖解之Java插入排序
1.插入排序簡(jiǎn)介
插入排序,一般也被稱為直接插入排序。對(duì)于少量元素的排序,它是一個(gè)有效的算法。插入排序是一種最簡(jiǎn)單的排序方法,它的基本思想是將一個(gè)記錄插入到已經(jīng)排好序的有序表中,從而一個(gè)新的、記錄數(shù)增1的有序表。在其實(shí)現(xiàn)過(guò)程使用雙層循環(huán),外層循環(huán)對(duì)除了第一個(gè)元素之外的所有元素,內(nèi)層循環(huán)對(duì)當(dāng)前元素前面有序表進(jìn)行待插入位置查找,并進(jìn)行移動(dòng)

2.插入排序思想及圖解
插入排序的基本思想如下:
把n個(gè)待排序的元素看成為一個(gè)有序表和一個(gè)無(wú)序表,開始時(shí)有序表中只包含一個(gè)元素,無(wú)序表中包含n-1個(gè)元素,排序過(guò)程中每次從無(wú)序表中取出第一個(gè)元素,把它的排序碼依次與有序表元素的排序碼進(jìn)行比較,將它插入到有序表中的適當(dāng)位置,使之成為一個(gè)新的有序表。
以序列:{55, 85, 21, 12, 5} 為例, 圖解如下:

粉紅色部分為每輪認(rèn)定的有序部分,其余顏色為認(rèn)定的無(wú)序部分。綠色標(biāo)識(shí)為每輪遍歷的無(wú)序序列的位置,將該位置的元素逐一與有序部分進(jìn)行比較,找到合適的位置進(jìn)行順序表的插入操作。
3.插入排序代碼實(shí)現(xiàn)
import java.util.Arrays;
/**
* @author 興趣使然黃小黃
* @version 1.0
* 插入排序
*/
public class InsertSort {
public static void main(String[] args) {
int[] array = {55, 85, 21, 12, 5};
System.out.println("排序前: " + Arrays.toString(array));
insertSort(array);
System.out.println("排序后: " + Arrays.toString(array));
}
//插入排序
public static void insertSort(int[] arr){
//邊界條件
if (arr.length < 1){
return;
}
for (int i = 1; i < arr.length; i++) {
//定義待插入的位置和待插入的數(shù)
int insertIndex = i-1; //arr[i]前面的位置,便于插入
int insertVal = arr[i]; //先將待插入的值保存
//給insertVal找到待插入的位置
//1.insertIndex > 0防止越界
//2.insertVal < arr[insertIndex] 說(shuō)明還未找到待插入的位置
while (insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex+1] = arr[insertIndex];
insertIndex--;
}
if (insertIndex != i){
arr[insertIndex+1] = insertVal; //插入
}
System.out.println("第" + i + "輪: " + Arrays.toString(arr));
}
}
}

到此這篇關(guān)于排序算法圖解之Java插入排序的文章就介紹到這了,更多相關(guān)Java插入排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個(gè)簡(jiǎn)單的類加載器URLClassLoader案例
這篇文章主要介紹了一個(gè)簡(jiǎn)單的類加載器URLClassLoader案例,這里寫了一個(gè)小 demo,來(lái)加深對(duì)于反射的理解,需要的朋友可以參考下2023-04-04
springboot+nginx+https+linux實(shí)現(xiàn)負(fù)載均衡加域名訪問(wèn)簡(jiǎn)單測(cè)試
這篇文章主要介紹了springboot+nginx+https+linux實(shí)現(xiàn)負(fù)載均衡加域名訪問(wèn)簡(jiǎn)單測(cè)試,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05
Spring Boot JPA中使用@Entity和@Table的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot JPA中使用@Entity和@Table的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
SpringBoot整合mybatis-plus實(shí)現(xiàn)分頁(yè)查詢功能
這篇文章主要介紹了SpringBoot整合mybatis-plus實(shí)現(xiàn)分頁(yè)查詢功能,pringBoot分頁(yè)查詢的兩種寫法,一種是手動(dòng)實(shí)現(xiàn),另一種是使用框架實(shí)現(xiàn),現(xiàn)在我將具體的實(shí)現(xiàn)流程分享一下,需要的朋友可以參考下2023-11-11
java正則匹配HTML中a標(biāo)簽里的中文字符示例
這篇文章主要介紹了java正則匹配HTML中a標(biāo)簽里的中文字符,涉及java中文正則及HTML元素操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Java設(shè)計(jì)實(shí)現(xiàn)一個(gè)針對(duì)各種類型的緩存
這篇文章主要為大家詳細(xì)介紹了Java如何設(shè)計(jì)實(shí)現(xiàn)一個(gè)針對(duì)各種類型的緩存,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-11-11
Java的常見熱門ORM框架優(yōu)缺點(diǎn)區(qū)別
Java?ORM框架是一種用于將Java對(duì)象映射到關(guān)系型數(shù)據(jù)庫(kù)中的工具,使得開發(fā)人員能夠通過(guò)對(duì)象操作數(shù)據(jù)庫(kù)而不必直接使用SQL查詢,Java開發(fā)變得更加高效和易于維護(hù),選擇適合你的ORM框架是根據(jù)你的需求決定的,比如你的應(yīng)用場(chǎng)景,數(shù)據(jù)結(jié)構(gòu)和技術(shù)水平等2024-02-02
Intellij IDEA創(chuàng)建spring-boot項(xiàng)目的圖文教程
本文通過(guò)圖文并茂的形式給大家介紹了Intellij IDEA創(chuàng)建spring-boot項(xiàng)目的教程,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-01-01

