#include<stdio.h>
#include<stdlib.h>
void QuikSort(int a[],int m,int n){
//第一个数作为关键字,比他大的放到他后面,比他小的放到他前面,分为两个子序列,然后对这两个子序列分别重复这个操作
int low=m;
int high=n;
int temp=a[low];
//开始这里我直接写成了temp=a[0]导致只要第一个数比后面的都小时就失败,
//因为递归的时候不一定high +1就等于零的特别是对于在于关键字右边的序列!
if(m<n){
while(low<high){
//这里有了low<high不代表里面的low<high就没有必要,每一个循环完了后high和low都要变化的!!
while(low<high&&temp<a[high]){
//从高位寻找小于temp的数组项并且赋值给低位
high--;
}
a[low]=a[high];
while(low<high&&temp>a[low]){
//从低位寻找大于temp的数组项并且赋值给高位
low++;
}
a[high]=a[low];
}
a[low]=temp;//a[high]=temp,将关键数据赋值给分割点
QuikSort(a,m,low-1);//递归排序低位序列
QuikSort(a,high+1,n);//递归排序高位序列
}else{
return ;
}
}
void main(){
int i=0;
int a[]={1,5,8,4,6};
QuikSort(a,0,4);
for(;i<5;i++){
printf("%d ",a[i]);
}
}