快排思想:(1)随便取一个数为基准,一般选择最后一个数
(2)然后从头遍历,将比基准数小的放在左边,大的放在右边,放的时候用交换规则换;
(3)在左右两边重复此步骤,直至不能分解为止。
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
//辅助交换函数
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int partition(int a[], int p, int r)
{
int flag = a[r];
int i = p - 1;
for (int j = p; j < r; j++)
{
if (a[j] <= flag)
{
i = i + 1;
Swap(a[i], a[j]);
}
}
Swap(a[i + 1], a[r]);
return (i+1);
}
void quick_sort(int a[], int p,int r)
{
int q;
if (p < r)
{
q=partition(a, p, r);
quick_sort(a, p, q - 1);
quick_sort(a, q, r);
}
}
int main(int argc, char **argv)
{
int a[10] = { 12,45,748,12,56,3,89,4,48,28 };
quick_sort(a,0,9);
for (int i = 0; i != 10; ++i)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}