一.原理
将数组的第一个数设为中轴,将小于轴的数字移到左边,大于轴的数字移到右边(从大到小的排序刚好相反),这样数组就被分为三个部分,左子数组,轴,右子树组,用上述办法递归左右子树,数组元素为0或1时,我们认为它是有序的,就是递归的结束条件,这样就实现了一个数组的快速排序。
二.
例子:数组arr[10]={1,3,5,7,2,4,8,9,6,10}
代码和注释:
#include<cstdio>
#include<iostream>
using namespace std;
void quicksort(int num[],int left ,int right)
{
if(left<right){
int pivot=num[left];//将第一个数字设为轴
int i=left;
int j=right;
while(i<j){//i向左移动,j向右移动,直到指向同一个位置
while(i<j&&num[j]>pivot){//j从后向前移动,找到第一个小于或者等于pivot的数字放到i的位置上
j--;
}
num[i]=num[j];
while(i<j&&num[i]<pivot){//i从前向后移动,找到第一个大于或者等于pivot的数字放到j的位置上
i++;
}
num[j]=num[i];
}
num[i]=pivot;//此时i和j同时指向同一个位置,也可以写成写成num【j】=pivot;
quicksort(num, left, j-1);//对左边进行快排,当然,当左边没有原素或者只有一个元素时我们默认其为有序的;
quicksort(num, i+1, right);//对右边进行快排,右边同理;
}else{
return ;
}
}
int main(){
int arr[10]={1,3,5,7,2,4,8,9,6,10};
quicksort(arr, 0, 9);
for(int i=0;i<10;i++){
cout<<arr[i]<<" ";
}
return 0;
}
三.运行结果