日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法知识】详解直接插入排序算法

發布時間:2025/3/8 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法知识】详解直接插入排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

已發布:

【算法知識】詳解選擇冒泡算法

【算法知識】詳解選擇排序算法

在玩撲克牌的時候,我們抽到一張牌的時候,都是將它插入到當前手中牌的合適位置的。
如下圖:

(上圖來自算法導論)
直接插入排序也是這樣的思想。

基本思想

插入排序的思想是:
將待排序序列分成兩個序列,前面的序列保持有序,依次選取后面的序列的元素,在前面的序列中進行插入。
初始時,有序序列的長度為1。

例子

給定序列
[9 , 20 , 13 , ?20 , 12 ] ? ?。
初始狀態如下:

初始狀態

分成兩個序列如下:

初始的兩個序列

定義兩個變量 valindex。其中val表示后面序列中待插入的元素,index表示前面序列中插入的索引。

第一次插入
val初始化為 arr[1],即20;
Index初始化為當前val值的前一個元素的索引,即0;

此時 arr[index] < val 不用移動,index-- 后將變為負數,退出循環。
第一次插入結束。
變成如下狀態:

第一趟插入狀態1

第二次插入
val初始化為 arr[2],即10;
Index初始化為當前val值的前一個元素的索引,即1;

第二趟插入初始狀態

此時 arr[index] > val 并不是合適的插入位置,將index代表的元素向后移動;

第二趟插入狀態1

index--;

此時 arr[index] < val 找到了插入位置,即 index + 1;
退出當前循環;
arr[index+1] 賦值為val;
得到如下狀態圖:

第二趟插入狀態3

第三次插入
val初始化為 arr[3],即13;
Index初始化為當前val值的前一個元素的索引,即2;

此時 arr[index] > val 并不是合適的插入位置,將index代表的元素向后移動;

得到如下狀態圖:

index--;

第三趟插入狀態2

此時 arr[index] < val 找到了插入位置,即 index + 1;
退出當前循環;
arr[index+1] 賦值為val;
得到如下狀態圖:

第三趟插入狀態3

第四趟插入

第四趟插入1第四趟插入2

代碼

先定義變量;

int value;//待插入元素 int index;//初始值為待插入元素前一個元素的索引

由算法思想和例子解釋,寫成最終代碼如下:

import java.lang.reflect.Array; import java.util.Arrays;public class Solution {public static void main(String[] args) {InsertSort(new int[] { 9 ,20 , 10, 13 , 12});}public static void InsertSort(int [] arr){int value;//待插入元素int index;//初始值為待插入元素前一個元素的索引for(int i= 1 ; i< arr.length;i++){//i從第二個元素開始,默認第一個元素是有序的//循環條件是小于數組長度,因為也要將最后一個元素插入到前面的序列value = arr[i];index = i - 1;//初始為前一個元素while(index >=0 && value < arr[index]){//需要保證index合法//每當前面的元素比待插入元素大,就向后移動arr[index + 1] = arr[index];//不用怕覆蓋,因為value保存著待插入的值index--;}//當退出循環,表明已經找到了待插入位置,即index + 1arr[index + 1] = value;}System.out.println(Arrays.toString(arr));} }

時間復雜度

在排序前元素已經是按需求有序了,每趟只需與前面的有序元素序列的最后一個元素進行比較,總的排序碼比較次數為n-1,元素移動次數為0。時間復雜度為;
而在最差的情況下,及第i趟時第i個元素必須與前面i個元素都做排序碼的比較,并且每做一次就叫就要做一次數據移動,此時的時間復雜度為 ;
所以直接插入排序的時間復雜度為。

穩定性

插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素。如果碰見一個和插入元素相等的,那么將會把待插入元素放在相等元素的后面。所以,相等元素的相對的前后順序沒有改變,所以插入排序是穩定的。

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看

總結

以上是生活随笔為你收集整理的【算法知识】详解直接插入排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。