原理(升序):
1.第一趟排序先将数组第一个数用pivot作为基准保存
2.先从最右侧开始,若遇到的元素比pivot小,则将此元素赋值给当前i代表的元素(这里的赋值就是交换,下同)
3.再从左侧开始,若遇到的元素比pivot大,则将此元素赋值给当前j代表的元素
4处理左边子序列
5.处理右边子序列
#include<bits/stdc++.h>
using namespace std;
void quickSort(int* arr,int low,int high);
int main()
{
int n,a[50];
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
quickSort(a,0,n-1);
for(int i = 0; i < n; i++)
cout << a[i] << " ";
return 0;
}
void quickSort(int* arr,int low,int high)
{
int i = low, j = high;
if(i >= j)
return;
int pivot = arr[i];
while(i < j && arr[j] >= pivot)
j--;
arr[i] = arr[j];
while(i < j && arr[i] <= pivot)
i++;
arr[j] = arr[i];
arr[i] = pivot;
quickSort(arr,low,i-1);
quickSort(arr,i+1,high);
}
/*我的代码好像有点问题,这个是正确的
void quickSort(int s[], int l, int r)
{
if (l< r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
*/