用C 學《演算法導論》 第二章 插入排序

2021-09-12 07:34:00 字數 1151 閱讀 8753

輸入:a1,a2,a3,......,an(n個數)

輸出:a1',a1',a2',a3',......,an'(a1'≤a1'≤a2'≤a3'≤......≤an')

思想:感覺和我們玩鬥地主一樣的感覺

在剛開始時,我們的手牌是空的,開局後,每抽到一張牌,我們把他按照順序插在適合的位置,為了找到合適的位置,我們需要一一與底牌比較。以陣列a = 為例,插入排序的過程如下:

step 1:a[0]=1                a = ;

step 2:a[1]=3 1<3 a = ;

step 3:a[2]=2 1<2<3 a = ;

step 4:a[3]=6 3<6 a = ;

step 5:a[4]=5 3<5<6 a = 。

具體c++**:

#include using namespace std;

//用於列印陣列,方便檢視

int printarr(int a, int length)

cout<

printarr(num, len);

insert_sort(num, len);

cout<

printarr(num, len);

}

**執行結果:

接下來我們來分析這個演算法:

最好情況         最差情況

比較次數 n-1 2+3+4+……+n=(n+2)n/2

移動次數 0 1+2+3+……+n-1=n*n/2

若待排序物件序列**現各種可能排列的概率相同,則可取上述最好情況和最壞情況的平均情況。移動次數約為 n2/4。因此,直接插入排序的時間複雜度為 o(n2)。

演算法導論 第二章 插入排序

1.插入排序類似於整理撲克牌 排列好順序的撲克和待排序的撲克 2.插入排序 insertion sort 引數是乙個陣列a 1.n 共n個數,輸入的各個數字原地排序 sorted in place 分為排好序的和待排序的,每次取乙個待排序元素,找到插入的位置,插入已排好序的部分中。元素取完程式結束,...

演算法導論(平話)第二章演算法基礎 插入排序

前言 對於作者這類學術很渣,算導簡直就是一本晦澀難懂的書,作者根據自己的有限的理解對每一章節做平話描述。插入排序 元素 序列 引數 原址 迭代 偽 此文不做專業名詞的闡述,意在幫助很多初次接觸的程式設計師用白話的方式理解插入排序。1.白話概念 從一堆東西中 可以是任何物質 乙個個取出,邊取邊按照一定...

演算法導論 第二章演算法基礎(1)插入排序

輸入 n個數的乙個序列 輸出 輸入序列的乙個排序 滿足 a1 a2 a n a prime 1 le a prime 2 le cdots le a prime n a1 a 2 an 插入排序原址排序輸入的數,演算法在陣列a aa中重排這些數,在任何時候,最多只有其中的常數個數字儲存在陣列外面。f...