One-day-one-program(6)之快速排序

来源:互联网 发布:龙霸网络电视 编辑:程序博客网 时间:2024/05/16 16:57

       基本思想:

              任取待排序序列中的某个元素作为基准(一般取第一个元素),将待排序元素分为左右两个子表,左子表中元素的关键字值小于基准元素的关键字值,右子表中的关键字则大于或等于基准元素的关键字值,然后分别对两个子表继续进行划分,直至每一个子表只有一个元素或空为止。最后得到的便是有序序列。

#include<stdio.h>#define MAXSIZE 100int Partition(int R[],int low,int high)//一趟划分算法{//以R[low]为支点int i,j;i=low;j=high;R[0]=R[low];while(i<j){while((R[j]>=R[0])&&(i<j))j--;if(i<j){R[i]=R[j];i++;}while((R[i]<=R[0])&&(i<j))i++;if(i<j){R[j]=R[i];j--;}}R[i]=R[0];return i;}void Quick_Sort(int R[],int low,int high)//递归算法{int i;if(low<high){i=Partition(R,low,high);Quick_Sort(R,low,i-1);Quick_Sort(R,i+1,high);}}void main(){int R[MAXSIZE];int n;int k;printf("请输入你要排序的数的个数:\n");scanf("%d",&n);printf("请输入你要排序的数:\n");for(k=1;k<=n;k++){scanf("%d",&R[k]);}printf("用快速排序方法所得结果为:\n");Quick_Sort(R,1,n);for(k=1;k<=n;k++){printf("%d\n",R[k]);}}

0 0