分治的基本思想:是将原来的问题分解成若干个规模更小但结构与原问题想死的子问题,然后递归去解决这些子问题,最后将这些子问题的解的组合作为原问题的解。
时间复杂度:快速排序是一种不稳定的排序方法,平均时间复杂度是O(n*logn),最差的复杂度是O(n*n)
快速排序的图解过程如下:
代码:
#include <iostream>
using namespace std;
#define MAXN 100
int a[MAXN + 1], n; //全局变量存数组
void QuickSort(int left, int right)
{
int i, j, t, temp;
if(left > right)
return;
temp = a[left]; //基准
i = left;
j = right;
while(i != j)
{
while(a[j] >= temp && i < j)
{
j--;
}
while(a[i] <= temp && i < j)
{
i++;
}
if(i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
QuickSort(left, i - 1);
QuickSort(i + 1, right);
}
int main()
{
cout<<"=========快速排序版本一=========="<<endl;
int i = 0, j;
int T;
cout<<"请输入要对数据排序的个数:"<<endl;
cin>>T;
cout<<"请输入要排序的数据:"<<endl;
while(T--)
{
cin>>a[i];
i++;
}
QuickSort(0, i - 1);
cout<<"排序后的数据是:"<<endl;
for(j = 0; j < i; j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return 0;
}
运行结果: