C 插入排序

2022-08-20 05:33:12 字數 1462 閱讀 9808

從第乙個元素開始,該元素可以認為已經被排序

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

如果該元素(已排序)大於新元素,將該元素移到下一位置

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

將新元素插入到該位置中

重複步驟2

示例**為c語言,輸入引數中,需要排序的陣列為arr,排序長度為length。示例**的函式採用in-place排序,呼叫完成後,arr中從0到length處於公升序排列。

1 #include 

2 #include 34

char *insertion_sort_char(char arr, int length)

5 14 arr[j + 1] = key;

15 }

16return arr;

17 }

1819

int main()

20 ;

22 printf("

%s\n

", arr);

23char *result= insertion_sort(arr, 6);

24 printf("

%s\n

", result);

25 exit(0);

26 }

gcc -o insert_sort insert_sort.c

./insert_sort

acpeqd

acdepq

如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數減去(n-1)次。平均來說插入排序演算法複雜度為o(n

2)。因而,插入排序不適合對於資料量比較大的排序應用。但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。

插入排序:已知一組公升序排列資料a[1]、a[2]、……a[n],一組無序資料b[1]、b[2]、……b[m],需將二者合併成乙個公升序數列。首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a陣列中某一資料a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若無陣列a,可將b[1]當作n=1的陣列a)

優點:穩定,快;

缺點:比較次數不一定,比較次數越多,插入點後的資料移動越多,特別是當資料總量龐大的時候,但用鍊錶可以解決這個問題。

插入排序C

變數 i 1.代表待插入數字的下標 preindex.代表前乙個元素的下標 length.代表陣列的長度 排序過程 arr 0 跳過,從arr 1 開始,每乙個數都和它前面的數字比較。while iarr i 那麼前大後小,亂序 arr preindex 1 current i include us...

c 插入排序

從整個待排序列中選出乙個元素插入到已經有序的子串行中去,得到乙個有序的 元素加一的子串行,直到整個序列的待插入元素為0,則整個序列全部有序。在實際的演算法中,我們經常選擇序列的第乙個元素作為有序序列 因為乙個元素肯定是有序的 我們逐漸將後面的元素插入到前面的有序序列中,直到整個序列有序。簡單插入排序...

C 插入排序

c 插入排序 開發工具與關鍵技術 c visualstudio插入排序和氣泡排序有一點相似,但是它們是完全不同的兩種排序方式,插入排序的方式是這樣的,例如有乙個三個元素的陣列排序順序是1,0,3我們是公升序排序方式,元素1我們不管它,元素0我們就拿出來和元素1比較這時元素0比元素1小,元素1往後移一...