#include<stdio.h>
#define MAX_NUM 100//数组最大长度
int quick_pass(int*,int,int);//一趟快排,返回基准位置
void quick_sort(int*,int,int);//采用递归实现完整快排
void arrin(int*);//数组输入函数
void print(int*);//数组输出函数
int length=0;//数组当前元素个数
int quick_pass(int* arr,int low,int high)
{//对待排记录arr,从low->high进行一趟快速排序
int x;
static int flag=0;//计数器,记录被调用次数即快速排序次数
x=arr[low];//使用首个元素作为快排基准
while(low<high){//从high处开始进行一趟快速排序
while(low<high && arr[high]>=x){
high--;
}
if(low<high)
{
arr[low]=arr[high];
low++;
}
while(low<high && arr[low]<x){
low++;
}
if(low<high){
arr[high]=arr[low];
high--;
}
}
arr[low]=x;
flag++;
printf("第%d次排序的结果为:\n",flag);
print(arr);
return low;
}
void quick_sort(int* arr,int low,int high)
{//完整快排
int pos;//记录基准位置
if(low<high)
{
pos=quick_pass(arr,low,high);
quick_sort(arr,low,pos-1);
quick_sort(arr,pos+1,high);
}
}
void print(int* arr)
{
for(int i=0;i<length;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
void arrin(int* arr){
int num;
if(length>=MAX_NUM){
printf("再插要越界了\n");
}
printf("请输入数据,输入-1结束\n");
for(int i=length;i<MAX_NUM;i++){
scanf("%d",&num);
if(num==-1){
break;
}
else{
arr[i]=num;
++length;
}
}
}
int main()
{
int arr[MAX_NUM]={0};
arrin(arr);
printf("打印前为:\n");
print(arr);
quick_sort(arr,0,length-1);
printf("打印后为:\n");
print(arr);
}
新更各排序算法:
【C语言】选择类排序之简单选择排序、堆排序分析及输出每趟排序的结果-优快云博客