码迷,mamicode.com
首页 > 其他好文 > 详细

快速排序

时间:2014-09-26 22:36:48      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   使用   ar   for   文件   sp   

#include<stdio.h>
#define MAXSIZE 100   //假设文件长度,即待排序的记录数目
typedef int KeyType;
typedef struct{
    KeyType key;
}RcdType;
typedef struct{
    RcdType R[MAXSIZE+1];//存储待排序记录的一维数组,R或作为[0]闲置或作为“哨兵使用
    int length;
}SortSqlist;
//关键字类型为KeyType自己定义
int partition(SortSqlist &L,int low,int high){
    //以R[low]为“枢猪”,对顺序表L的子表R[low]~R[high]进行一趟快速排序
    //函数返回“枢猪”的最终位置
    KeyType pivotkey;
    L.R[0]=L.R[low];
    pivotkey=L.R[low].key;
    while(low<high){//从表的两端交替向中间扫描
        while(low<high&&L.R[high].key>=pivotkey)high--;
        L.R[low]=L.R[high];//将比“枢猪”记录小的记录移到低端low
        while(low<high&&L.R[low].key<=pivotkey)low++;
        L.R[high]=L.R[low];//将比“枢猪”记录大的记录移到端高high
    }
    L.R[low]=L.R[0];//枢猪记录到位
    return low;//返回枢猪位置
}void QSort(SortSqlist &L,int low,int high){
//对顺序表L的子表R[low]~R[high]进行快速排序
   int pivotLoc;
   if(low<high){
      pivotLoc=partition(L,low,high);
      QSort(L,low,pivotLoc-1);//对低子表递归排序
      QSort(L,pivotLoc+1,high);//对高子表递归排序
      }
}
void QuickSort(SortSqlist &L){
//对顺序表L做快速排序
QSort(L,1,L.length);
}
int main(){
 int i;
 SortSqlist L;
 printf("输入排序的个数");
 scanf("%d",&L.length);
 for(i=1;i<=L.length;++i)
   scanf("%d",&L.R[i].key);
  QuickSort(L);
 for(i=1;i<=L.length;++i)
    printf("%d ",L.R[i].key);
 return 0;
}

 

快速排序

标签:style   blog   color   io   使用   ar   for   文件   sp   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!