一、单向扫描法:

快排伪代码_i++

#include<stdio.h>
#include<iostream>
using namespace std;
void quickSort(int arr[],int p,int r){
int partition(int arr[],int p,int r);
if(p<r){
int q=partition(arr,p,r);
quickSort(arr,p,q-1);
quickSort(arr,q+1,r);
}
}
void swap(int arr[],int begin,int end){
int temp=arr[begin];
arr[begin]=arr[end];
arr[end]=temp;
}
int partition(int arr[],int p,int r){
int priority=arr[p];
int sp=p+1;
int bigger=r;
while(sp<=bigger){
if(arr[sp]<=priority){
sp++;
} else {
swap(arr,sp,bigger);
bigger--;
}
}
swap(arr,p,bigger);
return bigger;
}


int main(){
int arr[1000]={
32,12,3,21312,31,32,3,3,3,2,3,3,323,13,
3,3,13,2,312,3234,23423,434,4,3,424,2,2,1,31,3,31,4,2,2,3,2
,34,34,324,5,56,543,3};
int index=0;
while(arr[index]!=0){
index++;
}
quickSort(arr,0,index-1);
for(int i=0;i<index;i++){
cout<<arr[i]<<" ";
}

}

二、双向扫描法:

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int partition2(int arr[],int p,int r){
int priority=arr[p]; //设置一个主元为初始端
int left=p+1; //从p+1开始
int right=r; //以r结束
while(left<=right){
while(left<=right&&arr[left]<=priority) left++;
while(left<=right&&arr[right]>priority) right--;
if(left<right)
swap(arr[left],arr[right]);
}
swap(arr[p],arr[right]);//移动后->right left(将数组中right与p所指向的数进行交换)
return right;
}
void quickSort(int arr[],int p,int r){
if(p<r){
int q=partition2(arr,p,r);
quickSort(arr,p,q-1);
quickSort(arr,q+1,r);
}
}
int main(){
int a[10000];
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
quickSort(a,0,n-1);
for(int i=0;i<n;i++){
if(i==n-1) cout<<a[i];
else cout<<a[i]<<" ";
}
}

三、三分法: