快速排序 Lua語言實現

2021-09-29 03:54:19 字數 1898 閱讀 5671

快速排序- 選一基準元素,依次將剩餘元素中小於該基準元素的值放置其左側,大於等於該基準元素的值放置其右側;然後,取基準元素的前半部分和後半部分分別進行同樣的處理;以此類推,直至各子串行剩餘乙個元素時,即排序完成(模擬二叉樹的思想,from up to down)

平均時間複雜度:o(nlogn)穩定性:不穩定

特點:快速排序在最壞的情況下時間複雜度是o(n**2),平均時間複雜度是o(nlogn)。快速排序基本上被認為是相同數量級的所有排序演算法中,平均效能最好的。

基本思想:

先從數列中取出乙個數作為基準數。

分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

再對左右區間重複第二步,直到各區間只有乙個數。  

lua語言**實現:

function table.length( t )

local count = 0

for k, v in pairs(t) do

count = count + 1

end-- 返回表的長度

return count

end-- 快排主體

function quicksort(tbl, low1, high1)

-- body

if low1 >= high1 then return end

local low = low1

local high = high1

local base = tbl[low]

while low < high do

--從右往左找小於base的數

while tbl[high] >= base and low < high do

high = high - 1

endtbl[low] = tbl[high]

--從左往右找大於base的數

while tbl[low] < base and low < high do

low = low + 1

endtbl[high] = tbl[low]

end-- 儲存基準元素

tbl[low] = base

-- 遞迴

quicksort(tbl, low1, low)

quicksort(tbl, low+1, high1)

endfunction main()

-- 輸入輸出

local table_item=

for k,v in ipairs(table_item) do

print(k,v)

endprint("********************=我是分界線******************************")

quicksort(table_item, 1, table.length(table_item))

for k,v in ipairs(table_item) do

print(k,v)

endendmain()

print("********************=我是分界線******************************")

執行結果:

1	2

2 53 8

4 35 18

6 1********************=我是分界線******************************

1 12 2

3 34 5

5 86 18

********************=我是分界線******************************

C語言實現快速排序

快速排序,是氣泡排序的改進,通過尋找 中間元素 在一趟排序中,把比 中間元素 小的數放到左邊,比 中間元素 大的數放到右邊,如此遞迴,最終得到排序結果。include define num 5 void quick sort int a,int left,int right void swap in...

c語言實現快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽結束...

快速排序(java 語言實現)

package com.shan.quicksort 快速排序是由c.a.r.hoare 開發的,該演算法在陣列中選擇乙個稱為主元 pviot 的元素將陣列分為兩部分,是的第一部分的元素全部小於或等於主元,而第二部分的元素全部大於主元。對第一部分遞迴地使用快速排序,對第二部分遞迴地使用快速排序。au...