快速排序(分区排序),是一种平均性能非常好的排序方法,采用了分治的思想,核心思路:
1.数组分区(引出了“自顶向下”的递归解决方案);
2.递归求解。
时间复杂度:O(nlog2n);
快速排序是一种不稳定的算法。
QuickSort.h
#include <iostream>
#include <vector>
using namespace std;
class QuickSort
{
private:
vector<int> list1;
public:
QuickSort::QuickSort(vector<int> list2);
void QuickSort::quick_sort(int i,int j);
void QuickSort::out();
};
QuickSort.cpp
#include "QuickSort.h"
#include <vector>
#include <iostream>
using namespace std;
QuickSort::QuickSort(vector<int> list2)
{
for(int i = 0 ; i<list2.size(); i++)
{
list1.push_back(list2[i]);
}
}
void QuickSort::quick_sort(int left , int right)
{
int i=left; //左下标
int j=right; //右下标
int provit=list1[left];
while(i<j && list1[j]>=provit) j--;
if(i<j )
{
int temp=list1[j];
list1[j]=list1[i];
list1[i]=temp;
}
while(i<j &&list1[i]<=provit) i++;
if(i<j && list1[i]>provit)
{
int temp=list1[j];
list1[j]=list1[i];
list1[i]=temp;
}
if(i!=left) quick_sort(left , i-1);
if(j!=right) quick_sort(i+1 , right);
}
void QuickSort::out()
{
for(int i = 0; i< list1.size() ;i++)
{
cout<<list1[i]<<"";
}
}
void main()
{
vector <int> list2;
for (int i = 10; i>0; i--)
list2.push_back(i);
QuickSort qs(list2);
cout<<"Befor sort:"<<endl;
qs.out();
cout<<endl;
cout<<"After sort:"<<endl;
qs.quick_sort(0,list2.size()-1);
qs.out();
getchar();
}