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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

排序算法系列:插入排序算法

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

概述

直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增1的有序表。

– 《大話數據結構》


版權說明

著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
本文作者:Q-WHai
發表日期: 2016年3月24日
原文鏈接:https://qwhai.blog.csdn.net/article/details/50968422
來源:CSDN
更多內容:分類 >> 算法與數學


目錄

文章目錄

  • 概述
  • 版權說明
  • 目錄
    • @[toc]
  • 算法原理分析
  • 算法步驟
  • 邏輯實現
  • 復雜度分析
  • Ref
  • Github源碼下載
  • 征集

算法原理分析

從上面的概述中我們也就可以知道了,這里對數組進行排序的過程需要兩個序列才能完成。
一個待排序的亂序序列,一個是已排序的有序序列。我們現在要要做的就是把亂序的元素一個一個地從亂序列中插入到有序序列中去。就像下面這樣:

可是,這里還是有一些不太好的地方,比較明顯地方就是我們需要額外添加一個輔助數組。如果這個待排序數據比較大,那么可能添加輔助數組的策略就不能使用了。
這里我們不難想到,在原始數組中,有這樣的一個等式:整體序列 = 有序序列 + 亂序序列
也就是說我們可以把當前序列數組一分為二,左邊為有序,右邊為亂序。

這樣每次從亂序序列中取出第一個元素,從有序列中插入。直到序列整體有序為止。具體的步驟請參見下面的算法步驟


算法步驟

  • 默認序列中的第0個元素是有序的(因為只有一個元素a[0]嘛,自然是有序的);
  • 從下標為1(下標從0開始)的元素開始,取當前下標i位置處的元素a[i]保存到一個臨時變量waitInsert里;
  • 對前半部分有序序列的循環遍歷,并與waitInsert比較,直到遇到一個比waitInsert小的元素(這里默認是從小到大排序),此時的下標為j,那么現在只要對a[j+1]進行賦值waitInsert即可;
  • 將待插入元素的下標 i 向后推移一個位置;
  • 重復進行第2步到第4步,直到亂序序列中的元素被全部插入到有序序列中;
  • 經過以上5個步驟之后,整體序列必然有序,排序完成。

  • 邏輯實現

    /** 排序算法的核心模塊* * @param array* 待排序數組*/private void sortCore(int[] array) {int arraySize = array.length;for (int i = 1; i < arraySize; i++) {int j = i;int waitInsert = array[i];while(j > 0 && waitInsert < array[j - 1]) {array[j] = array[j - 1];j--;}array[j] = waitInsert;}}

    復雜度分析

    排序方法時間復雜度空間復雜度穩定性復雜性
    平均情況最壞情況最好情況
    插入排序O(n2)O(n2)O(n)O(n)穩定簡單
    這里的最壞的情況和平均情況從代碼中就可以看出來,因為有兩嵌套的for循環嘛。那么其最好的情況呢?這個就是對于一個有序的序列來說,不需要進行交換,只是比較了n次,所以這里最好的時間復雜度就是O(n)。

    Ref

    • 《大話數據結構》

    Github源碼下載

    • https://github.com/qwhai/algorithms-sort

    征集

    如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
    https://www.processon.com/i/56205c2ee4b0f6ed10838a6d

    總結

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

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