學習總結 插入排序

2021-10-06 06:56:23 字數 2042 閱讀 7583

插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是乙個有效的演算法。

1.1 演算法思想

每一次將乙個待排序的元素,按其關鍵字大小插入到有序佇列的合適位置,直到全部元素插入完成為止。

假設有一組無序序列r0,r1, … ,rn-1

將序列中下標為 0 的元素視為元素個數為 1 的有序序列。

依次把r1,r2, … ,rn-1插入到有序序列中。所以,需要乙個從下標1n-1的外部迴圈去掃瞄 。

插入過程,將ri插入到前面有序的序列中,rir0~ri-1進行比較,確定要插入的合適位置。

做乙個內部迴圈,從後往前比較,即從下標i-1開始向0進行掃瞄。

1.2 **實現

#include

#include

using

namespace std;

vector<

int>

insertsort

(vector<

int> list)

result = list;

// 第1個數肯定是有序的,從第2個數開始遍歷,依次插入有序序列

for(

int i =

1; i < result.

size()

; i++

) result[j +1]

= temp;

}return result;

}void

main()

; vector<

int>

test

(arr, arr +

sizeof

(arr)

/sizeof

(arr[0]

)); cout <<

"排序前"

<< endl;

for(

int i =

0; i < test.

size()

; i++

) cout << endl;

vector<

int> result;

result =

insertsort

(test)

; cout <<

"排序後"

<< endl;

for(

int i =

0; i < result.

size()

; i++

) cout << endl;

system

("pause");

}

1.3 時間複雜度

在插入排序中,當待排序陣列是有序時,是最優的情況,只需當前數跟前乙個數比較一下就可以了,這時一共需要比較n- 1次,

時間複雜度為o(n)

最壞的情況是待排序陣列是逆序的,此時需要比較次數最多,總次數記為:1+2+3+…+n-1,所以,插入排序最壞情況下的時間

複雜度為o(n2)

平均來說,a[1…j-1]中的一半元素小於a[j],一半元素大於a[j]。插入排序在平均情況執行時間與最壞情況執行時間一樣,是輸

入規模的二次函式。

1.4 空間複雜度

插入排序的空間複雜度為常數階o(1)

插入排序總結

典型的比較排序演算法 插入排序 堆排序 快速排序。根據演算法導論中出現的先後順序,首先出場的是插入排序 一.原版插入排序偽 1.for j 2 to a.length 為陣列a的長度 2.for i j 1 downto 1 3.if a i a i 1 4.exchange a i with a ...

總結 插入排序

一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 1 從第乙個元素開始,該元素可以認為已經被排序 2 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 3 如果該元素 已排序 大於新元素,將該元素移到下一位置 4 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 5...

插入排序總結

所謂插入排序,就是把一組亂序的資料,依次拿出乙個,放入到一組已經排好序的資料中的正確的位置。又可以分為 直接插入排序 折半插入排序 二路插入排序 表插入排序 希爾排序 一 直接插入排序 相對比較簡單的一種排序方法,就是按照概念一步一步的操作,可以使用乙個for迴圈實現,具體 如下 直接插入排序 vo...