#include <stdio.h>
#include <stdlib.h>
int QuickPass(int *array,int low,int high)
{
//pivotkey记录枢轴的关键字
//low 和 high 是指示指针
//经过一次排序之后枢轴左边的元素小于枢轴,枢轴右边的元素大于枢轴
int pivotkey;
*array = *(array+low);
pivotkey = *(array+low);
while(low < high) //如果满足条件
{
while(low < high && *(array+high) >= pivotkey)--high;
*(array+low) = *(array+high);
while(low<high && *(array+low)<=pivotkey)++low;
*(array+high)=*(array+low);
}
*(array+low)=*array; //枢轴元素归位
return low;
}
void QSort(int *array,int low,int high)
{
int pivotloc;
if(low < high) //low指针低于high指针
{
pivotloc = QuickPass(array,low,high); //获取枢轴位置
QSort(array,low,pivotloc-1); //左半边递归
QSort(array,pivotloc+1,high); //右半边递归
}
}
void QuickSort(int *array,int length)
{
QSort(array,1,length);
}
int main()
{
int *array,length,i;
scanf("%d",&length);
array = (int*)malloc(sizeof(int)*(length+1));
for(i=1;i<=length;i++)
scanf("%d",array+i);
QuickSort(array,length);
for(i=1;i<=length;i++)
printf("%d ",*(array+i));
return 0;
}
一步一步复习数据结构和算法基础-快速排序
最新推荐文章于 2024-10-07 15:43:52 发布