基本快速排序方法
void quickSort(int num[], int length)
{
qSort(num, 0, length - 1);
}
void qSort(int num[], int low, int high)
{
if(low < high)
{
int pivot = partition(num, low, high);
qSort(num, low, pivot - 1);
qSort(num, pivot + 1, high);
}
}
int partition(int num[], int low, int high)
{
int temp = num[low];
while(low < high)
{
while(low < high && num[high] >= temp)
hith--;
swap(num, low, high);
while(low < high && num[low] <= temp)
low++;
swap(num, low, high);
}
return low;
}
快速排序方法的优化:
- 比较值pivot的优化 ,三数取中法,取三个关键字先进行排序,将中间数作为比较值pivo;
- 递归的优化,进行尾递归优化,采用迭代而不是递归,可以缩减堆栈深度,提高整体性能
- 不必要的交换,少了对此交换数据的操作,在性能上有了部分提高
- 小数组的选择,使用插入排序
递归的优化
void qSort(int num[], int low, int high)
{
int pivot;
while(low < high)
{
pivot = partition(num, low, high);
qSort(num, low, pivot - 1);
low = pivot + 1;
}
}
不必要的交换-少了对此交换数据的操作,在性能上有了部分提高
int partition(int num[], int low, int high)
{
int temp = a[low];
while(low < high)
{
while(low < high && num[high] >= temp)
high--;
num[low] = num[high];
while(low < high && num[low] <= temp)
low++;
num[high] = num[low];
}
num[low] = temp;
return low;
}
小数组的选择-使用插入排序
void qSort(int num[], int low, int high)
{
int pivot;
if((high - low) > MAX_LENGTH_INSERT_SORT)
{
while(low < high)
{
pivot = partition(num, low, high);
qSort(num, low, pivot - 1);
low = pivot + 1;
}
}
else
InsertSort(num);
}
排序方法比较: