代码如下
/*
描述:快速排序实现及验证,快速排序是不稳定算法,比如5,5,5,4
*/
#include <iostream>
using namespace std;
/*
描述:用于将排序数列分为两组,并返回中轴值位置
*/
int Partition(int arr[], int iStart, int iEnd)
{
int iPivotVal = arr[iEnd];
int iPivotPos = iStart - 1;
int iTmp = 0;
for(int j = iStart; j < iEnd; j++)
{
if(arr[j] <= iPivotVal)
{
iPivotPos ++;
iTmp = arr[j];
arr[j] = arr[iPivotPos];
arr[iPivotPos] = iTmp;
}
}
arr[iEnd] = arr[++iPivotPos];
arr[iPivotPos] = iPivotVal;
return iPivotPos;
}
/*
描述:快速排序
*/
void QuickSort(int arr[], int iStart, int iEnd)
{
if(iStart < iEnd)
{
int iPivotPos = Partition(arr, iStart, iEnd);
QuickSort(arr, iStart, iPivotPos - 1);
QuickSort(arr, iPivotPos + 1, iEnd);
}
}
/*
描述:输出序列
*/
void Output(int iArr[], int iLen)
{
for(int i = 0; i < iLen; i++)
{
cout << iArr[i] << " ";
}
}
int main()
{
int arr[] = {2,8,7,1,3,5,6,4};
int iLen = sizeof(arr)/sizeof(arr[0]);
Output(arr,iLen);
QuickSort(arr, 0, iLen - 1);
cout << "After Sort" << endl;
Output(arr, iLen);
}
分区流程
代码如下
/*
描述:快速排序实现及验证,快速排序是不稳定算法,比如5,5,5,4
*/
#inc