我正在尝试在此进行快速排序以进行研究。但我不知道如何快速查看这个算法,但不知道现在使用冒泡排序是什么或如何实现它,但我如何继续实施快速排序?
# choose pivot
swap a[1,rand(1,n)]
# 2-way partition
k = 1
for i = 2:n, if a[i] < a[1], swap a[++k,i]
swap a[1,k]
→ invariant: a[1..k-1] < a[k] <= a[k+1..n]
# recursive sorts
sort a[1..k-1]
sort a[k+1,n]
这是我的代码
int main()
{
srand(time(NULL));
int length = 250000;
double arr[length];
for(int i = 0; i<length; ++i) arr[i] = rand();
// mergeSort2(arr, arr+length-1);
for(int i = 0; i < (length-1); i++)
{
for(int j = i+1; j < length; j++)
{
if( arr[i] > arr[j])
{
swap(arr[i], arr[j]);
}
}
}
ofstream ofs("input.txt");
for(int i = 0; i<length; ++i) ofs << i << " " << arr[i] << endl;
}
答案 0 :(得分:4)
这animation非常有帮助。
快速排序(Dive and Conquer)的核心就是以下几点:
选择一个元素作为支点
分区(l =左,右=右)
目标是将原始阵列分成两组(几乎!!)
S_left = {x in S - {pivot}:x小于或等于pivot}
S_right = {x in S - {pivot}:x大于或等于pivot}
为了简化表示法:
<强>策略强>
编程QS有两种常用方法,但一般来说QS需要三个参数(Array,low,high),其中low是数组的左端索引,high是数组的右端索引(可能是2,3,5,10,不一定是0,长度为1)
Initially
l = low-1
r = high
advances l when A[l] less than or equal to pivot
decrements r when A[r] is greater than or equal to pivot
swap A[l] and A[r]
repeat this process until l is greater than or equal to r, and swap (pivot, A[l])
Call QuickSort(A, left, l-1)
Call QuickSort(A, l+1, right)
我给你大部分的实施。 在纸上用一个小例子(9号对我来说似乎合理)来解决。在实施正确之前不要使用rand。
试试这个数组:
我明天可以写更多。myArray = 9,6,2,5,11,4,20,1,3