Java經(jīng)典排序算法之插入排序代碼實(shí)例
1.簡介
插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。
插入排序的時(shí)間復(fù)雜度是O(n^2) ,空間復(fù)雜度 是O(1)。 將第一個(gè)看成一個(gè)有序數(shù)列,將后面的數(shù)跟前面的數(shù)比較,大的就往后移
第一趟排序后:得到一個(gè)有序數(shù)列,其大小為2
第二趟排序后:得到一個(gè)有序數(shù)列,其大小為3
第三趟排序后:得到一個(gè)有序數(shù)列,其大小為4 …
每一趟插入排序,都可以將一個(gè)無序值插入一個(gè)有序數(shù)列,直至全部值有序
實(shí)現(xiàn)思路:
- 第一步、將第一待排序序列第一個(gè)元素看做一個(gè)有序序列,把第二個(gè)元素到最后一個(gè)元素當(dāng)成是未排序序列。
- 第二步、從頭到尾依次掃描未排序序列,將掃描到的每個(gè)元素插入有序序列的適當(dāng)位置。(如果待插入的元素與有序序列中的某個(gè)元素相等,則將待插入元素插入到相等元素的后面。所以插入排序是穩(wěn)定的排序)
2.圖解流程
3.代碼實(shí)現(xiàn)
package com.znzz.insertSort; import java.util.Arrays; public class InsertSort { public static void main(String[] args) { inserrtSort(new int[]{6,2,0,2,4,7,9,10}); } public static void inserrtSort(int[] arr) { int value; //待插入元素 int index; //待插入元素的前一個(gè)元素的索引 for (int i = 1; i < arr.length; i++) { //這里i=1,默認(rèn)第一個(gè)元素是有序的, //循環(huán)條件是小于數(shù)組長度 value = arr[i]; index = i - 1; //前一個(gè)元素 while (index >= 0 && value < arr[index]){ //需要保證index合法 //每當(dāng)前面的元素比待插入元素大,就向后移動(dòng) arr[index + 1] = arr[index]; index--; } //到這里表示退出循環(huán),說明找到了待插入的位置, arr[index + 1] = value; } System.out.println(Arrays.toString(arr)); } }
到此這篇關(guān)于Java經(jīng)典排序算法之插入排序代碼實(shí)例的文章就介紹到這了,更多相關(guān)Java插入排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中computed計(jì)算屬性和data數(shù)據(jù)獲取方式
這篇文章主要介紹了Vue中computed計(jì)算屬性和data數(shù)據(jù)獲取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03MyBatis-Plus詳解(環(huán)境搭建、關(guān)聯(lián)操作)
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,今天通過本文給大家介紹MyBatis-Plus環(huán)境搭建及關(guān)聯(lián)操作,需要的朋友參考下吧2022-09-09springboot項(xiàng)目獲取resources相對(duì)路徑的方法
這篇文章主要介紹了springboot項(xiàng)目獲取resources相對(duì)路徑的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12一文搞懂Runnable、Callable、Future、FutureTask及應(yīng)用
一般創(chuàng)建線程只有兩種方式,一種是繼承Thread,一種是實(shí)現(xiàn)Runnable接口,在Java1.5之后就有了Callable、Future,這二種可以提供線程執(zhí)行完的結(jié)果,本文主要介紹了Runnable、Callable、Future、FutureTask及應(yīng)用,感興趣的可以了解一下2023-08-08實(shí)例詳解Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換
這篇文章主要介紹了Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12