#include <iostream>
using namespace std;
/*
1、选择轴值
Partition(int first,int last)
2、通过递归进行排序
void QuickSort();
*/
class Sort
{
public:
Sort(int a[], int n);
//快速排序
void QuickSort(int first, int last);
void pp()
{
for (int i = 0; i < length; i++)
cout << data[i] << " ";
}
private:
int length;
int *data;
//选择轴值
int Partition(int first, int last);
};
Sort::Sort(int a[], int n)
{
data = new int[n];
length = n;
for (int i = 0; i < n; i++)
data[i] = a[i];
}
//找轴值
int Sort::Partition(int first, int last)
{
int i, j, t;
i = first, j = last;
//右侧扫描,寻找比i小的,交换。j--的条件:data[i]<=data[j].如果没有比i小的,就检测到了i。判断是否进行交换
while (i < j)
{
while (i < j && data[i] <= data[j]) //都是data[i]<=data[j]
j--;
if (i < j)
{
t = data[i];
data[i] = data[j];
data[j] = t;
i++;
}
//左侧扫描
while (i < j && data[i] <= data[j]) //都是data[i]<=data[j]
i++;
if (i < j)
{
t = data[i];
data[i] = data[j];
data[j] = t;
j--;
}
}
return i; //轴值
}
//排序
void Sort::QuickSort(int first, int last)
{
if (first >= last) //递归出口,一般都是first和first,不能是first==last
return;
else
{
int mid = Partition(first, last);
QuickSort(first, mid - 1); //mid-1
QuickSort(mid + 1, last); //mid+1
}
}
int main()
{
int n, *a;
cin >> n;
a = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
Sort s(a, n);
s.QuickSort(0, n - 1);
s.pp();
// int *a,n;
// cin>>n;
// a=new int [n];
// for(int i=0;i<n;i++)
// cin>>a[i];
// Sort s(a,n);
// s.QuickSort(0,n-1);
// s.pp();
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布