排序演算法 一 快速插入排序

2021-09-02 15:44:31 字數 1421 閱讀 9132

因為對演算法這一項實在是弱爆了,對自己從零開始學習,慢慢記錄過程,加油哦

再因為最近在學習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,大於基準的放...