#include<iostream>
using namespace std;
int getPivot(int arr[],int startIndex, int endIndex)
{
int left = startIndex;
//把第一个元素作为基准元素
int &pivot = arr[startIndex];
int right = endIndex;
while (left != right)
{
//控制right右移动
while (left < right && arr[right] >= pivot)
{
right--;
}
//left左移
while (left < right && arr[left] <= pivot)
{
left++;
}
//交换left和right所在位置的值
if (left < right)
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
//当left=right 交换基准元素和该位置(left或者right)的值
int temp = arr[left];
arr[left] = pivot;
pivot = temp;
return left;
}
void quickSort(int arr[], int startIndex, int endIndex)
{
if (startIndex >= endIndex)
{
return;
}
//pivotIndex:基准元素
int pivotIndex = getPivot(arr, startIndex, endIndex);
//对基准元素前进行递归
quickSort(arr, startIndex, pivotIndex - 1);
//对基准元素后进行递归
quickSort(arr, pivotIndex + 1, endIndex);
}
void printArr(int arr[],int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
}
int main()
{
int arr[10] = { 1,3,5,9,7,2,4,6,8,10 };
int len = size(arr);
quickSort(arr,0,len-1);
printArr(arr,len);
system("pause");
return EXIT_SUCCESS;
}