解决的思路是保存待排序的数组中的数据元素的值
从数组的租后一项向前遍历当找到一个数据比保存的数据还小的数据的时候 用这个数据覆盖数组的第一个元素 而后从前往后遍历找到一个比最大未知的数据还大的数据 覆盖数据值 循环曹组 结束循环的条件是 当低位数据的标识大于等于高位的数据的标识的时候 这样就可以将数据分割为左边小于中间 中间小于右边的结构 从而 找到第一个 有顺序的数据
再使用递归操作多次执行操作 递归结束的条件是低位的标识大于高位的标识 进而得到有序的数组 排序结束
include <stdio.h>
#include <stdlib.h>
#include <string.h>
int funcation(int a[],int low,int high){
int temp;
temp=a[low];
while(low<high){
while(high>low){
if(a[high]<a[low]){
a[low]=a[high];
low++;
break;
}
else{
high--;
}
}
while(low<high){
if(a[low]>a[high]){
a[high]=a[low];
high--;
break;
}
else{
low++;
}
}
}
a[low]=temp;
return low;
}
void QuickSort_1(int a[],int low,int high){
if(a==NULL || low>=high) return ;
int temp;
temp=funcation(a,low,high);
QuickSort_1(a,low,temp-1);
QuickSort_1(a,temp+1,high);
}
int main(){
int a[]={11,0,20,3,7};
QuickSort_1(a,0,sizeof(a)/sizeof(a[0]));
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}