一、直接插入排序
基本思想:每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列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 拿到新的牌,檢查這...
基礎演算法 直接插入排序
它的演算法思想是 把要排序的陣列分為了兩個部分,一部分是經過插入排序後有序的部分,另一部分是除去第一部分待插入的元素 先將第一部分排序完成,然後再插入這個元素.插入排序由於操作不盡相同,可分為直接插入排序,折半插入排序 又稱二分插入排序 鍊錶插入排序,希爾排序。我們先來看下直接插入排序。直接插入排序...