您的位置:首页 > 理论基础 > 数据结构算法

一步一步复习数据结构和算法基础-快速排序

2012-07-24 18:43 381 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息