直接插入排序(straight insertion sort)的做法是:
每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。
第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。
直接插入排序屬於穩定的排序,最壞
時間複雜性為o(n^2),
空間複雜度為o(1)。
直接插入排序是由兩層巢狀迴圈組成的。外層迴圈標識並決定待比較的數值。內層迴圈為待比較數值確定其最終位置。直接插入排序是將待比較的數值與它的前乙個數值進行比較,所以外層迴圈是從第二個數值開始的。當前一數值比待比較數值大的情況下繼續迴圈比較,直到找到比待比較數值小的並將待比較數值置入其後一位置,結束該次迴圈。
待排序記錄 r1,r2,… ,rn–1, rn
第一步:r1
第二步:(r1 ), r2
第三步:(r1 , r2), r3 ……
第 j 步:(r1,r2,… ,rj–1), rj ……
第 n 步: (r1,r2,… ,rn–1), rn.
例:j=5
比較次數:dj+1 移動次數: dj+2 例:
原有序表:(9 15 23 28 37) 20
找插入位置 : (9 15 ^ 23 28 37) 20
新有序表: (9 15 20 23 28 37)
#include "stdafx.h"
//直接插入排序
void inert_sort(int *a,int len)
*(a+j+1)=temp;
}}int _tmain(int argc, _tchar* argv)
; int len=sizeof(a)/sizeof(int);
int i;
for(i=0;i printf("%d\t",a[i]);
inert_sort(a,len);
for(i=0;i printf("%d\t",a[i]);
return 0;}
直接插入排序 C語言
插入排序是最簡單的一種排序方法。它的基本操作就是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。直接插入排序時,我們將第二個陣列元素作為插入數,第乙個數作為有序陣列。逐個比較兩者大小,最後將數插入到合適位置。實現 插入排序 void inse int data int t ...
C語言直接插入排序
直接插入排序 穩定演算法 的基本思想 從第乙個數開始,認定陣列的前i個數有序,依次遍歷陣列,把後面的資料插入到合適的位置,使陣列繼續保持有序。include void swap int a,int b 直接插入排序 公升序 void insertsort up int arr,int length ...
直接插入排序 C語言
當我們打撲克牌的時候,為了使手中的牌順序排列,我們平常都會這麼做,每抽到一張牌,就會將它直接插入到適當的位置。例如 我們手上有1 3 4 5這四張牌,而當我們再抽到乙個2的時候,我們需要將2插入到1和3之間,這樣就能完成手中牌的順序排列。直接插入排序基本操作就是將乙個資料插入到已經排序好的有序序列中...