快速排序(递归)
//因为最近时间问题,该博客待完善
快速排序,时间复杂度:理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分(一次划分算法从两头交替搜索,直到low和hight重合,因此一次划分算法的时间复杂度是O(n);),整个算法的时间复杂度为O(nlog2n)。最坏情况:O(n2)。
快速排序很好理解,不过源码写起来如果不参考书籍的话可能需要耗费一定时间去思考,我就没有参考书籍.下面就是我用递归写的快速排序,仅供参考.
#include <iostream>
#include <time.h>
#include <stdlib.h>
/*
*输入随机数列元素个数,自动生成并排序
*/
using namespace std;
int speedSort(int* p,int *low,int* high);
int main()
{
srand(time(NULL));
int length = 0;
cout << "Please enter array's length"<<endl;
cin >> length;
int* a = new int[length];
cout << "Please enter the elements"<<endl;
for (int i = 0; i < length; i++)
a [i]=rand()%(length+1);
speedSort(a,&a[0],&a[length-1]);
for (int i = 0; i < length; i++)
cout << a[i] << ' ';
return 0;
}
int speedSort(int* p,int *low,int *high)
{
int m;
int* y1 = low, * y2 = high;
while (low < high)
{
if (*low <= *high)
high--;
else
{
m = *low;
*low = *high;
*high = m;
low++;
while(low < high && *low <= *high)
low++;
if(low < high && *low > *high)
{
m = *low;
*low = *high;
*high = m;
high--;
}
}
}
if (y1 < low - 1)
speedSort(p, y1, low - 1);
if (y2 > low + 1)
speedSort(p, low + 1, y2);
return 0;
}
你的赞就是我不托更的动力(●’◡’●)