快速排序

来源:互联网 发布:怎么看淘宝商品的类目 编辑:程序博客网 时间:2024/05/18 00:44

要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。

 注:1,cutoff值为5,不足cutoff使用插入排序。

        2,输入、输出格式参见测试用例0。

测试输入

411734019#

测试输入

After Sorting:0 17 19 34 41 Median3 Value:none

源代码

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<math.h>  #include <iostream>  using namespace std;   #define EQ(a,b) ((a) == (b))  #define LT(a,b) ((a) < (b))  #define LQ(a,b) ((a) <= (b))  #define MAXSIZE 1000  int a[MAXSIZE],y=0;    void Median3(int map[], int p, int q )  //取前中后三个元素,然后最小的放在最前,最大的放在最后,中值放在最大的左边。   {      int c = ( p + q ) / 2;      if( map[p] > map[c] ){          swap<int>(map[p], map[c]);       }      if( map[p] > map[q] ){          swap<int>(map[p], map[q]);       }        if( map[c] > map[q] ){          swap<int>(map[c], map[q]);       }      swap<int>(map[c],map[q-1]);       a[y++]=map[q-1];  }     void Insort(int num[],int i,int j){ // 一趟划分,采用三者取中值作主元       int k;       for(i=2;i<=j;i++){          num[0]=num[i];           k=i-1;          while(num[0]<num[k]){  //从零开始,则应防止数组下标越界,(不用0时,则必定不会越界,在0时,跳出)               num[k+1]=num[k];               k=k-1;           }                 num[k+1]=num[0];      }  }    void QKsort(int num[],int low,int high)  {         int i,j,temp;      Median3(num,low,high);      i=low;   //一定要从low开始,low+1的话与中值交换的下标不对。       j=high-1;      int x = num[j];          while(1){          while(num[++i]<x){   }          while(num[--j]>x){   }          if(i<j){                        temp=num[i];              num[i]=num[j];              num[j]=temp;          }          else break;      }      num[high-1]=num[i]; //将中值放在中间。       num[i]=x;              if(low+5<=i)             QKsort(num,low,i-1);       else             Insort(num,low,i-1);      if(i+5<=high)             QKsort(num,i+1,high);        else           Insort(num,i+1,high);  }     int main(){      int num[MAXSIZE];        int i=1,j=1,k=0;      while((scanf("%d",&num[i])==1)){          getchar();          i++;       }         if(i>6)          QKsort(num,1,i-1);                else           Insort(num,1,i-1);      printf("After Sorting:\n");       while(j<i) {          printf("%d ",num[j]);           j++;      }      printf("\n");      printf("Median3 Value:\n");      if(y>0) {          while(k<y)          printf("%d ",a[k++]);          printf("\n");      }       else printf("none\n");  }  


0 0