快速排序: 首先找一个基准数: (参照的数,一般是第一个);
例如:6 1 2 7 9 3 4 5 10 8
算法过程:先从右往左找一个小于 6 的书,然后交换他们,可以用变量i,j分别指向序列的最左最又。
修改过程回去看一下算法导论吧
代码如下:
int Partition(int l,int r,vector<int> &a)
{
int temp = a[l];
int i=l,j=r;
while(i<j)
{
//顺序很重要,先从右往左找:因为最后的过程是跟最左转换此时i= j
while(a[j] >= temp && i<j)
j--;
//再从左往右找
while(a[i] <= temp && i<j)
i++;
//交换两个数的位置
if(i < j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
//最终将基准位归位
}
a[l] = a[i];
a[i] = temp;
return i;
}
void quickSort(int l,int r,vector<int> &a)
{
if(l < r)
{
int d = Partition(l,r,a);
quickSort(l,d-1,a);
quickSort(d+1,r,a);//运用递归写
}
}
亲测有效吧,可能要修改。>_<