快速排序
1、挑选一个数作为基准(这里以最右侧的数为基准)
2、把小于基准的数,交换位置从最左侧开始放。
3、然后把基准放到最左侧后一位
4、排完基准左侧,排基准右侧
排序方法 | 平均情况 | 最好情况 | 最坏情况 | 辅助空间 | 稳定性 |
---|---|---|---|---|---|
快速排序 | O(nlogn) | O(nlogn) | O(n²) | O(nlogn) ~ O(n) | 不稳定 |
qt代码
#include "widget.h"
#include <QApplication>
#include <QtDebug>
int array[10] = {
7,1,5,8,3,9,6,0,2,4};
void printArry()
{
QString str;
for(int i = 0; i < sizeof(array)/sizeof(int); i++ )
{
str += QString::number(array[i]) + " ";
}
qDebug() << str;
}
void swap(int array[],int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
printArry();
}
int partition(int array[], int left, int right)
{
int pivot = array[right];
int tail = left - 1;
for(int i = left; i < right; i++)
{
if(array[i] <= pivot)
{
swap(array,++tail,i);
}
}
swap(array,tail + 1,right);
return tail + 1;
}
void quickSort(int array[], int left, int right)
{
if(left > right)
return;
int j = partition(array,left,right);
quickSort(array,left,j-1);
quickSort(array,j+1,right);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
int n = sizeof(array)/sizeof(int);
quickSort(array,0,n-1);
return a.exec();
}
输出结果:
数据:
"7 1 5 8 3 9 6 0 2 4 "
排序过程:
"1 7 5 8 3 9 6 0 2 4 "
"1 3 5 8 7 9 6 0 2 4 "
"1 3 0 8 7 9 6 5 2 4 "
"1 3 0 2 7 9 6 5 8 4 "
"1 3 0 2 4 9 6 5 8 7 "
"1 3 0 2 4 9 6 5 8 7 "
"1 0 3 2 4 9 6 5 8 7 "
"1 0 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 6 9 5 8 7 "
"0 1 2 3 4 6 5 9 8 7 "
"0 1 2 3 4 6 5 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
参考:http://www.cnblogs.com/eniac12/p/5329396.html#s1