解题思路:
选择一个数为中心数(一般都选择第一个数),大于中心数的数字放在中心数的右边,小于中心数的数字放在中心轴的左边。分别对左右子序列进行前三歩操作(递归)。
代码实现:
#include<iostream>
using namespace std;
void Quicksort(int arry[],int L,int R){
if(L>=R)
return ;
int left = L,right = R;
int pivot = arry[left];//以数组的第一个值为中心
while(left<right){
while(left<right&&arry[right]>=pivot){
right--;
}
if(left<right){
arry[left] = arry[right];
}
while(left<right&&arry[left]<=pivot){
left++;
}
if(left<right){
arry[right] = arry[left];
}
if(left>=right){
arry[left] = pivot;
}
}
Quicksort(arry,L,right-1);
Quicksort(arry,right+1,R);
}
int main(){
int n;//元素个数
cout << "请输入元素个数:" << endl;
cin >> n;
int arry[n];
cout << "请输入" << n << "个整数:" << endl;
for(int i = 0;i < n;i++){
cin >> arry[i];
}
int L = 0,R = n-1;
Quicksort(arry,L,R);
cout << "排序后为:" << endl;
for(int i = 0;i < n;i++){
cout << arry[i] << " ";
}
return 0;
}
运行结果:
代码看不懂的小伙伴可以在纸上过一遍!!