数组的快速分割排序
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define N 15
int a[N]={0};
//分割
//返回:分割点
int split(int a[],int low,int high)
{
int part=a[low];//分配一个位置,用于存放第一位
for(;;) //跳出条件未知,在内部用break进行跳出
{
while((high>low)&&(part<=a[high])) //拿出来的位跟最高位开始比较,如果最高位比此位高,则继续
high--;//左移一位 如果part大于了从后开始的某位,则
if(low>=high) break;
a[low]=a[high] ; //挑到小于对比位,放到最低位去
low++; //低位往右移,空来的位置为杠杆小于对比位的那个位置
while((high>low)&&(part>=a[low]))//part比此位大,继续移动
low++;
if(low>=high) break;
a[high]=a[low];//挑到比对比位大的数据,则将此数据填充到刚刚的空位
high--;
}
//对比已经完成,此时LOW=HIGH或者LOW>HIGH
a[high]=part; //将对比位填充进来
return high; //此时的位置就是中间位,而数组已进行分割
}
//快速排序
//输入:要排序的数组
void quicksort(int a[],int low,int high)
{
int mid=0;
if(low>=high) return ;
mid=split(a,low,high); //定义为数组,调用时用数组名就行
quicksort(a,low,mid-1);
quicksort(a,mid+1,high);
}
int main()
{
printf("Enter %d numbers to be sorted:",N);
for (int i = 0; i < N; i++)
scanf("%d",&a[i]);
quicksort(a,0,N-1);
printf("In sorted order:");
for (int i = 0; i < N; i++) {
printf("%d ",a[i]);
}
return 0;
}