#include <iostream>
using namespace std;
void QuickSort1(int iArray[], int left, int right)
{
//快速排序之前先判断一下当前待排序数组元素个数是不是大于1 否则就没有必要排序
if (left >= right)
{
//直接退出排序代码 没有必要进行排序了
return;
}
//开始进行快排算法
//首先我们先保存left索引对应的数据 当前数据作为切割数组的轴
int piovt = iArray[left];
//定义临时变量保存数组2端的索引
int leftIndex = left;
int rightIndex = right;
while (leftIndex < rightIndex)
{
//现在我们通过循环从右边开始搜索一个比轴值小的数据
while (leftIndex < rightIndex)
{
//如果右边的数大于等于当前的参数轴值
if (piovt <= iArray[rightIndex])
{
//右端索引指示器左移
rightIndex--;
}
else
{
//说明我们右端出现比轴值更小的数据
//这个时候我们就可以把这个更小的数据填充到索引轴索引对应的地方
iArray[leftIndex] = iArray[rightIndex];
leftIndex++;
//我们需要跳出循环了当前工作完毕
break;
}
}
//从左边开始搜索一个比轴值更大的数填写上次留下的坑
while (leftIndex < rightIndex)
{
//如果左边的数据小于轴值 我们索引指示器就往右走
if (piovt >= iArray[leftIndex])
{
leftIndex++;
}
else
{
//说明我们在左端找到了比轴值更大的数据
iArray[rightIndex] = iArray[leftIndex];
rightIndex--;
break;
}
}
}
iArray[leftIndex] = piovt;
QuickSort1(iArray, left, leftIndex - 1);
QuickSort1(iArray, rightIndex + 1, right);
}
template<class T>
void QuickSort(T* a, const int left, const int right)
{
if (left < right)
{
//选择枢轴进行划分
int i = left;
int j = right+1;//
int pivot = a[left];
//划分算法
do{
while (a[i] < pivot)
{
i++;
}
while (a[i] > pivot)
{
j--;
}
if (i < j) swap(a[i], a[j]);
} while (i < j);
swap(a[left], a[j]);
//递归
//左
QuickSort(a, left, j - 1);
//右
QuickSort(a, j+1,right);
}
}
int main()
{
int k[] = { 8, 6, 4, 2, 0, 1, 3, 5, 7, 9};//最后多加一个数
QuickSort1(k, 0, 9);
for (int i = 0; i < 10; i++)
{
cout << k[i] << endl;
}
return 0;
}