插入排序法:按照比較和插入來實現的。在待排序的元素中,假設前面n-1(其中n>=2)個數已經是排好順序的,現將第n個數插到前面已經排好的序列中,然後找到合適自己的位置,使得插入第n個數的這個序列也是排好順序的。按照此法對所有元素進行插入,直到整個序列排為有序的過程,稱為插入排序。(類似於打牌的過程中,從桌子上拿起一張牌排,在手中已有的牌中找到合適的位置插入進去)
流程如下:
1.首先對陣列前兩個元素進行從小到大排序(從大到小)排序。
2。將第三個數與前兩個排好的數進行比較,插入合適的位置。
3.將第四個數插入已經排好序的前三個數中。
4.不斷重複。排好為止。
插入排序演算法在對n個數字排序的時候,無論原資料是否有序,都要進行n-1次的中間排序。
空間複雜度:o(1)
;
時間複雜度:最優情況下,陣列有序,此時時間複雜度為o(n)
;
最壞情況下,陣列逆序,時間複雜度為o(n^2)
void insertionsort(int *a, int len)
a[j + 1] = ret; }}
int main()
; int i = 0;
int lenth = sizeof(array) / sizeof(array[0]);
printf("排序前;");
for (i = 0; i < lenth; ++i)
printf("\n");
insertionsort(array, lenth);
printf("排序後:");
for (i = 0; i < lenth; ++i)
system("pause");
return 0;
}
結果:
應用分析:插入排序適用於已經有部分資料已經排好,並且排好的部分越大越好。一般適用於小規模排序。
插入排序法
插入排序原理很簡單,講一組資料分成兩組,我分別將其稱為有序組與待插入組。每次從待插入組中取出乙個元素,與有序組的元素進行比較,並找到合適的位置,將該元素插到有序組當中。就這樣,每次插入乙個元素,有序組增加,待插入組減少。直到待插入組元素個數為0。當然,插入過程中涉及到了元素的移動。為了排序方便,我們...
插入排序法
這個應該是最基礎的演算法了,一直懶得寫,今天搞一下。其實就是先把大的牌往右邊移動,然後再把當前牌插入到前面即可,需要注意的是,不要用在陣列連續賦值,很容易出錯。還是老實點好。define crt secure no warnings include include include include t...
插入排序法
最近買了一本演算法導論的書籍,同學念研究生就是用的這本書,其實這些演算法資料結構直接就該弄完的,都工作四年了,只是知道一點說來慚愧,不懂演算法的程式設計師不是好的程式設計師。演算法導論剛開,從前往後看的,第一章的插入法看書的圖還是看的不明白容易產生誤導,於是自己寫了 才更加的理解了。一是看書的文字描...