因為對演算法這一項實在是弱爆了,對自己從零開始學習,慢慢記錄過程,加油哦
再因為最近在學習python和lua,就分別用兩種語言都實現了
快速插入排序
[color=blue]基本思想[/color]:(假設是:從小到大,公升序)
每次選擇乙個元素k插入已排好序的l[1...i]部分,如果l[x]>k,則k插入到l[x]前面,
要對l[x]後面的元素進行後移
[color=blue]時間複雜度:[/color]
最好情況:正序有序(從小到大)只需比較n次,不需要移動,複雜度o(n)
最壞情況:逆序有序(從大到小),插入第2個元素需要考察前1個元素,插入第3個元素需要考察前2個元素...插入第n個元素需要考察前n-1個元素,等差數列求和得n^2/2,
所以,複雜度為o(n^2)
[color=blue]穩定性:[/color]
穩定性,就是有兩個相同的元素,排序先後的相對位置是否變化,
插入排序中,k如果和l[x]相等,直接插入l[x]後面,這樣不用後移元素,所以插入排序是穩定的排序
**示例1:python**:quick_insert_sort.py
def quick_insert_sort(l):
for i in range(1, len(l)): #python陣列下標是從0開始的
tmp = l[i]
j = i - 1
while(j >= 0 and tmp < l[j]): #進行元素後移操作
l[j+1] = l[j]
j -= 1
l[j+1] = tmp #將待插入元素放到j+1位置
print('result:' + str(l))
if __name__ == '__main__':
quick_insert_sort([74,62,97,88,8,75,49,16,9])
**示例2:lua**quick_insert_sort.lua
function quick_insert_sort(t)
len = table.getn(t)
for i=2,len do --lua table下標是1開始的
tmp = t[i]
j = i - 1
while(j > 0 and tmp < t[j]) do --元素後移
t[j+1] = t[j]
j = j - 1
endend
endt =
quick_insert_sort(t)
for _,v in ipairs(t) do
print(v)
end
陣列的排序演算法(插入排序 快速排序)
在實現陣列元素排序時,排序的演算法有很多,例如氣泡排序法,選擇排序法,插入排序法以及快速排序法,來介紹插入排序和快速排序的具體實現吧 插入排序法 插入排序法德基本思路是 將要排序的陣列分成兩部分,每次從後面的陣列部分中取出索引最小的陣列元素,插入到前面陣列的適當位置中。通常在陣列開始排序時,將陣列的...
C語言排序演算法 快速排序 插入排序
1 插入排序 插入排序 英語 insertion sort 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。有點像玩撲克牌時整理紙牌順序 void insert int arr,int n arr i key void in...
氣泡排序,快速排序,插入排序
一 氣泡排序 大致分兩步 1 依次對比相鄰2個數字,前者比後者大就調換位置 2 重複第一步操作,直到所有數字都按順序排列 function bubblesort arr return arr 二 快速排序大致分三步 1 找基準 一般是以中間項為基準 2 遍歷陣列,小於基準的放在left,大於基準的放...