快速排序,是c++自带的sort函数使用的排序方法。是一种不稳定的排序法。它的时间复杂度在
O
(
n
)
−
O
(
n
l
o
g
n
)
O(n)-O(nlog_n)
O(n)−O(nlogn)之间,平均时间复杂度为
O
(
n
l
o
g
n
)
O(nlog_n)
O(nlogn)。
排序思想
快速排序的思想比较容易理解,使用左右交换法。
先设定一个界值,将数组划分为左右两部分。
将大于界值的数放到界值的右边,小于界值的数放到界值的左边,形成两个子序列。此时,左序列内的数都比界值小,右序列内的数都比界值大。
再重复上述步骤,分别对两个子序列排序,直到有序。
设数数列q : 19 97 9 6 17 1 8
一般地,我们取中间的数为界值,这个样例的界值为6。
设置左 右两个指针,分别从头和尾与界值比较。
左指针第一次查找 19 > 6
右指针第一次查找 8 > 6,右指针第二次查找 1 < 6,这时,将右指针移到1的位置。
交换19 1的位置。
得数列q :1 97 9 6 17 19 8
…
重复上述步骤,得到第一次排序后的数列,再对界值左右的子序列从头重复快速排序,就可以得到有序数列。
核心代码
//quick sort
#include<bits/stdc++.h>
using namespace std;
void quick_sort(int q[],int l,int r)
{
if(l>=r) return;
int i = l-1,j = r+1,x = q[l+r>>1];
while(i < j)
{
do i++ ;while(q[i]<x);
do j-- ;while(q[j]>x);
if(i < j)
{
swap(q[i], q[j]);
}
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main()
{
quick_sort(q,0,n-1);
}
2413

被折叠的 条评论
为什么被折叠?



