都是網上的資源,侵刪。
快速排序演算法以及其他演算法的時間以及空間複雜度**:
我認為比較好理解的思路:
1.先從數列中取出乙個數作為基準數。
2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有乙個數。
坑填數1.i =l; j = r; 將基準數挖出形成第乙個坑a[i]。
2.j–由後向前找比它小的數,找到後挖出此數填前乙個坑a[i]中。
3.i++由前向後找比它大的數,找到後也挖出此數填到前乙個坑a[j]中。
4.再重複執行2,3二步,直到i==j,將基準數填入a[i]中。
我自己實現的快速排序:
#include
#include
using
namespace std;
void
initialize
(int a,
int len)
}//快速排序
//1.先從數列中取出乙個數作為基準數。
//2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有乙個數。
void
quicksort
(int a,
int left,
int right)
a[i]
= pivot;
quicksort
(a, left, i -1)
;quicksort
(a, i +
1, right);}
}int
main()
//快速排序
quicksort
(array,
0,length-1)
; cout << endl<
for(
int i =
0; i < length; i++
)delete
array;
return0;
}
隨機快排與快速排序區別是它的基準數取值方式:
快排基準值取a[left]
隨機快排基準值取a[randnum]
/取得劃分點
intgetpivot
(int a,
int left,
int right)
a[low]
= a[high]
;while
(a[low]
<= a[high]
&& low < high)
a[high]
= a[low];}
pivot = low;
a[pivot]
= key;
}return pivot;
}//隨機快排
void
randomizedquicksort
(int a,
int left,
int right)
}
快速排序和隨機快速排序
嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...
快速排序與隨機快速排序
實現對陣列的普通快速排序與隨機快速排序。1 實現上述兩個演算法 2 統計演算法的執行時間 3 分析效能差異,作出總結 一 快速排序 通過使用分治思想對快速排序演算法進行描述。下面對乙個典型的子陣列a p r 進行快速排序的三步分治過程 分解 陣列a p r 被劃分為兩個 可能為空 子陣列a p q ...
快速排序(學習記錄)
快速排序是一種劃分交換排序,也就是分而治之。具體思想為 選取數列的乙個值作為基準數在數列中進行比較,把所有比基準數小的值放在基準數的左邊,所有比基準數大的值放在基準數的右邊將基準數的左右區間部分重複以上步驟,直到區間中只剩乙個數 接下來的步驟可以理解為挖坑填坑的操作 i指向陣列第乙個元素,j指向陣列...