您的位置:首页 > 其它

快速排序

2017-03-10 12:22 106 查看

快速排序

基本思想:找到一个合适的位置,对于k而言。它的左边的所有元素均比他小,右边的元素均比他大。

如何做到?

遍历数组,为方便直接设置k就是起始的那个元素,设置两个指针分别在头和尾,

如果进行偶数次交换(0算偶数次)那就让a[j]和k比,奇数次那就让a[i]和k比。

#include <iostream>
using namespace std;

void Swap(int & a, int & b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}

void QuickSort(int a[], int s, int e)
{
int k = a[s];
int i = s, j = e;
if(s >= e)
return;
while(i != j)//交换的目的是为了让k左边的元素小于k,k右边的元素大于k
{
while(i<j && a[j]>=k)//偶数次交换
j--;
Swap(a[i], a[j]);
while(i<j && a[i]<=k)//奇数次交换
i++;
Swap(a[i], a[j]);
}
QuickSort(a, s, i-1);//k左边排
QuickSort(a, i+1, e);//k右边排
}//完了之后a[i] == k

int a[] = { 93,27,30,2,8,12,2,8,30,89};

int main()
{
int size = sizeof(a) / sizeof(int);
QuickSort(a, 0, size-1);
for(int i=0; i<size; i++)
cout << a[i] << ",";
cout << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: