終於不用改**了,希望文章大修順利!
穩定的演算法:
不穩定的演算法
內部排序:排序過程不涉及內、外存交換
外部排序:排序過程有內、外存交換
in-place sort(不占用額外記憶體或占用常數的記憶體):插入排序、選擇排序、氣泡排序、堆排序、快速排序。
out-place sort:歸併排序、計數排序、基數排序、桶排序。
unstable sort、in-place sort
時間複雜度->o(
n2) (當輸入陣列已排序時)o(
nlog
n)「分而治之」的思想,乙個序列中選乙個值,把小於它的放左邊,大於它的放右邊。之後對左右兩個子串行同樣操作
**:
c
#include
#include
int main();
quick_sort(a,0,5);
int i = 0;
for(i = 0;i < 5; i++)
return0;}
void quick_sort(int s, int l, int r)
s[i] = x;
quick_sort(s, l, i - 1); // 遞迴呼叫
quick_sort(s, i + 1, r);
}}
python
def
quicksort
(arr, left, right):
if(left < right):
print(arr)
i, j = left, right
if len(arr) <= 1:
return
flag = arr[left]
while(left < right):
while(left < right and arr[right] >= flag):
right -= 1
if(left < right):
arr[left] = arr[right]
left += 1
while(left < right and arr[left] < flag):
left += 1
if(left < right):
arr[right] = arr[left]
right -= 1
arr[right] = flag
print(left, right, arr)
quicksort(arr, i, right - 1)
quicksort(arr, right + 1, j)
注意不能用切片的,因為切片傳遞的不是指標,切片是淺拷貝 排序演算法總結 快速排序
快速排序的一般步驟如下 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。來自於 啊哈!演算法 這裡需要解釋一下為什麼每次交換的時候都需要右邊的哨兵先走 最主要是相遇點的問題,演算法的...
排序演算法總結 快速排序
前面說的氣泡排序是一種交換排序。交換排序還有一種演算法,就是快速排序演算法。快速排序的核心思想是分而治之。意思就是選出乙個基準 可以是第乙個元素,也可以是最後乙個。為了方便我們選取第乙個 將小於這個基準的全部元素都放在這個基準的左邊,大於這個基準的全部元素都放在基準的右邊。然後分別對左右兩個陣列在進...
內排序演算法總結 快速排序
快速排序 快速排序是一種在含n個數的輸入陣列上最壞情況執行時間為o n2 的演算法,平均效能的期望執行時間為o nlgn 且o nlgn 記號中隱含的常數因子很小。另外,它還能夠進行原地置換排序。快速排序是基於分治模式上的,分治過程三個步驟 1.分解 把陣列a p.r 分成兩個非空子陣列a p.q ...