快速排序 虽说有stl的sort函数 但是快排还得掌握
图解快速排序(C++实现)_Magnum的博客-CSDN博客_c++快速排序
基准数左边第一个
① 从小到大排序
//快速排序(从小到大)
void quickSort(int arr[],int left, int right)
{
if(left >= right)
return;
int i, j, base, temp;
i = left, j = right;
base = arr[left]; //取最左边的数为基准数
while (i < j)
{
while (arr[j] >= base && i < j)
j--;
while (arr[i] <= base && i < j)
i++;
if(i < j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//基准数归位
arr[left] = arr[i];
arr[i] = base;
quickSort(arr,left, i - 1);//递归左边
quickSort(arr,i + 1, right);//递归右边
}
② 从大到小排序
//快速排序(从大到小)
void quickSort(int arr[],int left, int right)
{
if(left >= right) //递归边界条件
return;
if(left < 0 || right >= arr.size())
{
cout << "error args! array bound." << endl;
return;
}//非法输入判断,防止数组越界
int i, j, base, temp;
i = left, j = right;
base = arr[left]; //取最左边的数为基准数
while (i < j)
{
while (arr[j] <= base && i < j)
j--;
while (arr[i] >= base && i < j)
i++;
if(i < j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//基准数归位
arr[left] = arr[i];
arr[i] = base;
quickSort(arr,left, i - 1);//递归左边
quickSort(arr,i + 1, right);//递归右边
}
基准数为中间
void quickSort(int arr[],int left, int right)
{
if(left >= right) //递归边界条件
return;
int i, j, base;
base = arr[left+right>>1]; //取中间的数为基准数
i = left-1, j = right+1;
while (i < j)
{
do j-- ; while (arr[j] > base);
do i++ ; while (arr[i] < base);
if(i < j)
swap(arr[i],arr[j]);
}
quickSort(arr,left, j-1);//递归左边
quickSort(arr,j + 1, right);//递归右边
}