排序 快速排序 遞迴

2021-09-26 10:54:35 字數 1165 閱讀 8402

快速排序的遞迴寫法,總共寫了四種方法:兩個雙指標法、挖坑法、hoare法

快速排序的時間複雜度為o(nlogn),表現為不穩定的演算法

快速排序的陣列在交換或者覆蓋的過程中,相同的數字可能會出現位置的變換

//快排相當於二叉樹的前序遍歷

void swapargs(int *pa, int *pb)

int hoareway(int *src, int start, int end)//快排的hoare法

if (src[mid] > src[end])

if (src[start] > src[mid])

if (end - start <= 2)

swapargs(src + mid, src + end - 1);

while (a <= b)

if (a == b && (a == end-1 || a == 1))

if (a < b)

}swapargs(src + a, src + end - 1);

return a;

}int doublepointerway2(int *src, int start, int end)

//1.將陣列的中間結點當做連線點

//2.將連線點與最後乙個end對應的數字交換,實現保護作用

//3.將指標a與指標b分別開始從前到後,從後到前遍歷,指標a尋找比連線點大的數字,指標b尋找比連線點小的數字,找到了之後就交換

if (a == b && (a == end || a == 0))

if (a < b)

}swapargs(src + a, src + end);

return a;

}int digway(int *src, int start, int end)//使用挖坑法實現快排

if (a < b)

else

while (src[a] <= tmp && asrc[a])

while (a= src[a])

} return flag ? b : a;

}void dealquicksort(int *src, int start, int end)

else }

void quicksort(int *src, int n)

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...

快速排序 遞迴

因為最近時間問題,該部落格待完善 快速排序,時間複雜度 理想的情況是,每次劃分所選擇的中間數恰好將當前序列幾乎等分,經過log2n趟劃分 一次劃分演算法從兩頭交替搜尋,直到low和hight重合,因此一次劃分演算法的時間複雜度是o n 整個演算法的時間複雜度為o nlog2n 最壞情況 o n2 快...

陣列排序 2 快速排序(遞迴)

先去找陣列中間一項,把這一項拿出來 用拿出之後的陣列中的每一項跟 拿出的這一項比較 比這項大的放到乙個陣列 小的放到另外乙個陣列 接著對著兩個陣列做上述同樣的操作 function quicksort ary var n parseint ary.length 2 var cur ary.splic...