插入排序(insertion sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——
插入排序法。
將n個元素的數列分為已有序和無序兩個部分,如
,},}…,}
每次處理就是將無序數列的第乙個元素與有序數列的元素從後往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中。
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
⒈ 從第乙個元素開始,該元素可以認為已經被排序
⒉ 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
⒊ 如果該元素(已排序)大於新元素,將該元素移到下一位置
⒋ 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重複步驟2,直到將最後乙個元素插入到已排序序列中
示例**為c語言,輸入引數中,需要排序的陣列為array,起始索引為first,終止索引為last。示例**的函式採用in-place排序,呼叫完成後,array中從first到last處於公升序排列。
#include void print_array(int *array, int length)
void insertion_sort(int *array,unsigned int first,unsigned int last)
array[j] = temp; }}
int main(void)
; print_array(array,10);
insertion_sort(array, 0, 9);
print_array(array,10);
getchar();
return 0;
}
執行結果如下:
Linux C學習筆記 排序演算法4 快速排序
設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用第1個資料 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。一趟快速排...
linux c排序演算法
基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。include include intmain printf please input eight number for i 0 i 8 i for i 0 i 8 i for j 7 j...
Linux C語言學習筆記1
1 網路配置 虛擬機器 設定 網路介面卡 橋接 適用於網路環境有路由器,可分配多個ip nat 只有乙個ip 2 更新軟體列表 sudo apt get update 如果殘留鎖檔案 刪除方法 sudo rm 鎖檔案路徑 更改為中國伺服器 ubuntu software center edit so...