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