演算法基礎 直接插入排序

2021-06-20 16:27:20 字數 1242 閱讀 3221

一、直接插入排序

基本思想:每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列a=,假設我們希望序列是從下到大排列的,

那麼,首先將序列a分解為a1=和a2=,其中a1作為排好的序列,這樣一來,首先從a2中取第乙個元素-1,與a1中的1比較,按從下到大順序把-1放入a1中,a2的其他元素以此類推,依次放入a1中,這樣就得到了乙個有序的序列了。下面的演算法實現一就是直接插入排序的直譯。

空間複雜度分析:

時間複雜度分析:

(1) 如何待排序的序列是非遞減的,比較次數為n-1;如果排序前是非遞增順序,比較次數為:3+4,+...+(n+1)

這樣看來,時間複雜度為o(n^2),平均後仍然是o(n^2)

下面使用了3中方法實現了。

二、演算法實現

// 直接插入排序.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

void insertsort1(int a,int n);

void insertsort2(int a,int n);

void insertsort3(int a,int n);

void swap(int *x1, int *x2);

int _tmain(int argc, _tchar* argv)

; for ( int i=0; i< 4; i++)

cout << array[i] << " ";

cout << endl;

insertsort1(array,4);

//insertsort2(array,4);

//insertsort3(array,4);

for ( int i=0; i< 4; i++)

cout << array[i] << " ";

cout << endl;

return 0;

}//直接插入排序1

void insertsort1(int a,int n)

} }//直接插入排序2

void insertsort2(int a,int n)

}//直接插入排序3

void insertsort3(int a, int n)

void swap(int *x1, int *x2)

基礎演算法 直接插入排序

把陣列劃分為左右兩個區域,有序區和無序區,開始有序區只有乙個元素,就是陣列最左邊的元素。每次取得無序區第乙個元素x,從有序區最右邊的值開始到最左邊,把比x大得元素都往後移動乙個位置,直到找到乙個不大於x的位置,或者到了最左邊 即有序區所有元素都比x大,x應該插入到最前面 停下來的位置就是插入元素x的...

基礎演算法 直接插入排序

少壯不努力,老大刷水題。過去讀書的時候因為腦子不好使,很多概念,公式,演算法都記不住,等長大了,營養趕上來了,才學習的時候就會覺得更加的深刻。直接插入排序就像平常我們打撲克牌一樣,我們總是在別人發牌的時候,拿到一張牌就把它插到合適的位置上,這個過程中我們的肉眼和大腦做了3件事 1 拿到新的牌,檢查這...

基礎演算法 直接插入排序

它的演算法思想是 把要排序的陣列分為了兩個部分,一部分是經過插入排序後有序的部分,另一部分是除去第一部分待插入的元素 先將第一部分排序完成,然後再插入這個元素.插入排序由於操作不盡相同,可分為直接插入排序,折半插入排序 又稱二分插入排序 鍊錶插入排序,希爾排序。我們先來看下直接插入排序。直接插入排序...