1. 程式人生 > >演算法----插入排序(insert sort)

演算法----插入排序(insert sort)

插入排序就是每次選取一個元素插入到已經排序的子陣列中,如此迴圈,直到所有的元素都完成排序。

演算法實現:

void sort::insert_sort(int* a, const int n)
{
	for(int i=1; i<n; i++)
	{
		for(int j=i; j>0 && a[j] < a[j-1]; j--)
		{
			swap(a,j,j-1);
		}
	}
}

上述演算法的時間複雜度為O(N^2)。但是插入排序的演算法效能與待排序的陣列有關,當陣列已排序,則可線上性時間內完成,如果陣列為逆序,則需要O(N^2)的時間才能完成排序。因此插入排序演算法的時間複雜度在N~N^2之間。當陣列規模較小或者存在多個區域性有序的子陣列時,演算法的執行速度會更快。

相關推薦

演算法----插入排序insert sort

插入排序就是每次選取一個元素插入到已經排序的子陣列中,如此迴圈,直到所有的元素都完成排序。 演算法實現: void sort::insert_sort(int* a, const int n) { for(int i=1; i<n; i++) { for(i

十大經典排序演算法插入排序Insertion Sort

插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆

排序演算法sorting algorithm插入排序insertion sort

https://en.wikipedia.org/wiki/Insertion_sort   loop1: 4,6,1,3,7 -> 4,6,1,3,7 loop2: 4,6,1,3,7 -> 4,1,6,3,7         &nb

插入排序Insertion Sort

插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。 演算法描述:一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下: 1.從

PHP實現排序演算法----氣泡排序Bubble Sort

基本思想: 氣泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 最簡單排序實現: 我們先來看看在沒有學習各種排序方法前經常使用的排序方法(至少我是這樣。。。。): //這裡使用了型別提示(t

PHP實現排序演算法----歸併排序Merging Sort

基本思想: 歸併排序:就是利用歸併(合併)的思想實現的排序方法。它的原理是假設初始序列含有 n 個元素,則可以看成是 n 個有序的子序列,每個子序列的長度為 1,然後兩兩歸併,得到 ⌈ n / 2⌉ (⌈ x ⌉ 表示不小於 x 的最小整數)個長度為 2 或

PHP實現排序演算法----快速排序Quick Sort、快排

基本思想: 快速排序(Quicksort)是對氣泡排序的一種改進。他的基本思想是:通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行快速排序,整個排序過程可以遞迴進行,以達到整個序列有序的目的

選擇排序(Selection Sort)和插入排序Insertion Sort

選擇排序 工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 插入排序 工作原理:是通過構建有序序列,對於未排序資料,在已排序序列中從後向

排序演算法(六):快速排序Quick Sort

基本思想: 1)選擇一個基準元素,通常選擇第一個元素或者最後一個元素, 2)通過一趟排序講待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的 元素值比基準值大。 3)此時基準元素在其排好序後的正確位置 4)然後分別對這兩部分記錄用同樣

排序演算法(五):氣泡排序Bubble Sort

基本思想: 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 氣泡排序的示例:   演算法的實現: public v

排序演算法(四):堆排序Heap Sort

堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。 基本思想: 堆的定義如下:具有n個元素的序列(k1,k2,...,kn),當且僅當滿足 時稱之為堆。由堆的定義可以看出,堆頂元素(即第一個元素)必為最小項(小頂堆)。 若以一維陣列儲存一個堆,則堆對應一棵完全二叉樹,且所有

十大經典排序演算法之選擇排序Selection Sort

選擇排序(Selection-sort)是一種簡單直觀的排序演算法。 它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。  2.1 演算法描

排序演算法】氣泡排序Bubble Sort

一、簡介 氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。 二、

經典排序演算法:希爾排序Shell Sort

希爾排序 希爾排序是Shell在1959年提出的一種排序演算法,它出現的重要意義在於,之前的排序演算法基本都是O(n²),希爾演算法是突破這個時間複雜度的第一批演算法之一,所以它絕對值得我們瞭解掌握! 希爾排序的基本思想是: 把記錄按increment(增量)分

Leetcode演算法——57、插入區間insert interval

給定一系列不重複的區間,要求將一個新的區間插入到這些集合中(如果有必要,則合併)。 假設這些區間已經根據起始位置排好序了。 示例1: 輸入: intervals = [[1,3],[6,9]], newInterval = [2,5] 輸出: [[1,5],[6,9]]

PHP實現排序演算法----希爾排序Shell Sort

基本思想: 希爾排序是指記錄按下標的一定增量分組,對每一組使用 直接插入排序 ,隨著增量逐漸減少,每組包含的關鍵字越來越多,當增量減少至 1 時,整個序列恰好被分成一組,演算法便終止。 操作步驟: 先取一個小於 n(序列記錄個數) 的整數 d1 作為第一個

圖解排序演算法及實現——希爾排序 Shell Sort

希爾排序(ShellSort)也稱增量遞減排序演算法,即跨多步版的InsertionSort,是InsertionSort基礎上的改進版。InsertionSort可以看作ShellSort中gap=1的特例。希爾排序是非穩定排序演算法。 希爾排序通過將全部元

希爾排序Shell Sort——插入排序Java實現

希爾排序法(Shell Sort)屬於插入類排序,又稱為縮小增量排序。它對直接插入排序有了很大的改進,是直接插入排序的增強版。 希爾排序的基本思想是: 把線性表按步長gap分組,共有gap個組。 每

插入排序—希爾排序Shell Sort

希爾排序是1959 年由D.L.Shell 提出來的,相對直接排序有較大的改進。希爾排序又叫縮小增量排序 基本思想: 先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。 操作方法: 選

演算法----希爾排序shell sort

在分析插入排序(插入排序演算法實現)的演算法效能的過程時知道,當陣列規模較小或者存在較多的有序子序列時,插入排序將會在很短的時間內完成陣列的排序,為此可以設計一個單調序列h[n],將陣列分為多個小的序列,然後這些小的序列使用插入排序。h[n]={1,4,7,10,13,16