插入排序演算法詳解
插入排序:時間複雜度為O(n*n)。
原理:
1、假定待排序陣列部分有序,一般取陣列的第一個元素作為有序序列,其它的n-1個元素為無序序列;
2、每次取無序序列中一個元素e(複製儲存到臨時變數temp)與有序序列比較,找出元素e的在有序序列中的正確位置 i;
3、將 有序序列中下標為i以及 下標大於i的元素依次向後移動一個位置(這個過程中元素e原來的值會被覆蓋);
4、把temp中的值回填到位置i,完成一輪插入排序
public static void insertSort(int[] array){//插入排序 for(int j=1;j<array.length;j++){//外迴圈遍歷無序序列 int temp = array[j];//第一步儲存待插入元素的數值 int i=j-1; for(;i>=0 && temp < array[i];i--){//內迴圈遍歷有序序列 array[i+1] = array[i]; } array[i+1] = temp; } }
相關推薦
經典排序演算法(4)——折半插入排序演算法詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
插入排序演算法詳解
插入排序:時間複雜度為O(n*n)。 原理: 1、假定待排序陣列部分有序,一般取陣列的第一個元素作為有序序列,其它的n-1個元素為無序序列; 2、每次取無序序列中一個元素e(
直接插入排序演算法詳解
直接插入排序演算法到底是什麼個情況呢? 我們看到“直接”2個字,說明這個演算法應該是先得到我們插入的位置,然後就直接插入進去沒有什麼比較過程就插入進去了。 那麼直接插入排序演算法的本質是什麼呢,比如我們有一個有序陣列 1 2 3 4 5 6 8 9 我
插入排序演算法詳解(C++實現)
插入排序 輸入:n個數(a1,a2,...,an)。 輸出:輸入序列的一個排列(a1',a2',...,an'),使得a1'到an'為有序序列。 待排序的數稱為關鍵字key。 插入排序與平時生活中打牌時,整理手中牌的順序相似。最開始手中沒有牌,我們從桌上摸起一張牌,將它
Python四大流行排序演算法詳解--快速排序-氣泡排序-選擇排序-插入排序。
就作者而言使用Python經常用到的排序演算法就是快速排序、氣泡排序、選擇排序以及插入排序 就時間複雜度而言,快速排序是高階排序,查詢快速,時間複雜度為nlgn 而氣泡排序、選擇排序、插入排序則是比較低階的查詢演算法,時間複雜度為n**2 下面
九種經典排序演算法詳解(氣泡排序,插入排序,選擇排序,快速排序,歸併排序,堆排序,計數排序,桶排序,基數排序)
綜述 最近複習了各種排序演算法,記錄了一下學習總結和心得,希望對大家能有所幫助。本文介紹了氣泡排序、插入排序、選擇排序、快速排序、歸併排序、堆排序、計數排序、桶排序、基數排序9種經典的排序演算法。針對每種排序演算法分析了演算法的主要思路,每個演算法都附上了虛擬
各種排序演算法詳解C++實現
1.氣泡排序 時間複雜度 O ( n
經典排序演算法(1)——氣泡排序演算法詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
常用Java排序演算法詳解
一、最小堆排序(MinHeapSort) 基本原理:對於給定的n個記錄,初始時把這些記錄看作一顆順序儲存的二叉樹,然後將其調整為一個小頂堆,然後將堆的最後一個元素與堆頂元素進行交換後,堆的最後一個元素即為最小記錄;接著講前(n-1)個元素重新調整為一個小頂堆,再將堆頂元素與當前
C語言實現八大排序演算法詳解及其效能之間的
概述 排序是資料結構中的重要一節,也是演算法的重要組成部分。主要分為內部排序以及外部排序,今天我們講內部排序,也就是八大排序。 插入排序 直接插入排序 演算法思想 演算
經典排序演算法——氣泡排序演算法詳解
一、演算法基本思想 (1)基本思想 氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。 演算法的核心在於每次通過兩兩比較交換位置,選
堆排序演算法詳解及實現-----------c語言
堆排序原理: 堆排序指的是將大堆(小堆)堆頂(即下標為0)元素與堆的最後一個(即下標為hp->size - 1)元素交換,hp->size–,將其餘的元素再次調整成大堆(小堆),再次將堆頂(即下標為0)元素與堆的最後一個(即下標為hp->s
基礎排序演算法詳解與優化
1. 談談基礎排序 常見的基礎排序有選擇排序、氣泡排序和插入排序。眾所周知,他們的時間複雜度是 O(n*n)。 但是,現在要重新認識一下基礎排序演算法,尤其是“插入排序”:在近乎有序的情況下,插入排序的時間複雜度可以降低到 O(n)的程度。 因此,在處理系統日
選擇排序演算法詳解
基本思想: 在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。 實現: public static void selectSort(in
#關於選擇排序與氣泡排序演算法詳解
關於選擇排序與氣泡排序演算法詳解 本篇主要應C語言初學者對氣泡排序和選擇排序的一個初步介紹和認知 首先我們來認識下選擇排序 那什麼是選擇排序呢?選擇排序就是指在一推數組裡每一次從待排序的資料元素中選出最小(或最大)的一個元素,放在陣列最末的位置(最前面的位置也可
快速排序演算法詳解(原理、實現和時間複雜度)
快速排序是對氣泡排序的一種改進,由 C.A.R.Hoare(Charles Antony Richard Hoare,東尼·霍爾)在 1962 年提出。 快速排序的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料比另一部分的所有資料要小,再按這種方法對這兩部分資料分別進行快速排
八大排序演算法詳解——歸併排序
基本思想 n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果: 初始狀態:無序區為R[1..n],有序區為空。 第1趟排序: 在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1] 交換,使R[1..1
歸併排序演算法詳解及其優化
歸併排序演算法: 思想:分治法 每個遞迴過程涉及三個步驟 第一, 分解: 把待排序的 n 個元素的序列分解成兩個子序列, 每個子序列包括 n/2 個元素. 第二, 治理: 對每個子序列分別呼叫歸併排序__MergeSort, 進行遞迴操作 第三
【初等排序】插入排序法詳解
插入排序法 插入排序法是一種很容易想到的演算法,它的思路與打撲克時排列手牌的方法很相似。比如我們現在單手拿牌,然後要將牌從左至右,從小到大進行排序。此時我們需要將牌一張張抽出來,分別插入到前面已排好序的手牌中的適當位置。重複這一操作直到插入最後一張牌,整個排序就完成了。 插入排序的演算法
AVL樹插入刪除演算法詳解(有圖) -- C++語言實現
一:AVL樹介紹 AVL樹本質上還是一棵二叉搜尋樹,它的特點是: 1.本身首先是一棵二叉搜尋樹。 2.帶有平衡條件:每個結點的左右子樹的高度之差的絕對值(平衡因子)最多為1。在本文中用分別用-1,0,1定義左邊樹高,等高,右邊樹高。平衡因子用m_bf表示。 也就是說,AV