插入排序 :我在學習一些簡單的演算法,我用文字記錄我的進步。
插入排序 其實就是在待排序列中找到,沒有排序好的元素,插入的適當的位置,本文以公升序為例,簡單的講解一下。
直接看下面的**:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void swap(int array, int i, int j)
void printarray(int array, int len)
else
} }}void insert_sort(int array, int len)
array[k] = tmp;//元素插入
}}int main()
; int len = sizeof(array) / sizeof(*array);
printarray(array, len);
insert_sort(array, len);
printarray(array, len);
system("pause");
return 0;
}
簡單說明:
insert_sort 核心就是這個函式,就是要把 待排集合中的第乙個數字 記錄下來,放到了臨時變數tmp 中 ,for 外迴圈 ,從1 --> length-1 ,內迴圈j 從 i-1 --->0 遞減,
如果 j > 0 並且 arr[j]>tmp ,即待排數字, 就要把arr[j] 的值往後移動一下,同時要更新k ,記錄 tmp 最後 要放入的位置。 arr[j] 往後移動後,arr[j] 和arr[j+1] 是相同的值,
但是 tmp 已經 記錄了 arr[j+1] 的值, 所以不用擔心。內迴圈完成後,說明 k 的值找到了,tmp 的值 賦給 arr[k] 即可。
insert_sort2 是第二種實現, 其實 和第一種 幾乎一樣, 外迴圈 也是 x 從 1 ----> length-1 , 內迴圈 i 從 x-1 ---> 0 這兩個 迴圈完全一樣, 不同的是:
arr[i] > arr[i+1] 也是判斷這個 如果 後面的數字 比前面的大, 那肯定要 「移動」, 但是這個是直接交換, 思想就是 邊交換,邊尋找位置, 交換完成, 位置也就放到正確位置。
而演算法insert_sort ,採用 先找位置,之後 把值放到相應的位置。分兩步。 insert_sort 是邊交換,邊找位置,同時進行,最後交換完成,位置剛好找好。
結果如下:
C語言實現插入排序
插入排序是排序演算法的一種,它不改變原有的序列 陣列 而是建立乙個新的序列,在新序列上進行操作。這裡以從小到大排序為例進行講解。插入排序的基本思想是,將元素逐個新增到已經排序好的陣列中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的陣列是仍然有序的。在實際使用中,通常是排序整個無序陣列,所...
插入排序(C 語言實現)
插入排序分為直接插入排序和折半插入排序,直接插入排序利用遍歷的方式查詢插入位置,時間複雜度為n 2,直接插入法由於不會改變相同元素的相對順序,所以直接插入排序是一種穩定的排序演算法。折半插入排序 二分插入排序 折半插入利用二分法查詢插入位置,只是減少了查詢比較的操作,所以其時間複雜度仍為n 2,二分...
插入排序 C語言實現
插入排序很好理解,與實際生活緊密相連,或可以說是 於生活中的感悟。插入排序是用的非常多的一種排序方法,因為在實際程式設計中,資料往往是排序好的 所以往排序好的資料中插入新數,此時用插入排序會特別快速。假設十個人按排隊,從矮到高,你會怎麼排?首先,第2人與第1人比,若2比1矮,那麼他們互換位置,否則不...