zoukankan      html  css  js  c++  java
  • 多关键字的快速排序

    每次考核前都会回忆起这个记了又忘,忘了又记的代码,快排的一些边缘情况的考虑感觉很麻烦,而每次考前时间都很紧迫只能使用一个基本正确的代码:

     1 #include<stdio.h>
     2 int a[4]={-34,9,3,0};
     3 void swap(int &x,int &y)
     4 {
     5     int t=x;
     6     x=y;
     7     y=t;
     8 }
     9 
    10 int parttion(int a[],int l,int r)
    11 {
    12     int i=l,j=r+1;
    13     int x=a[l];
    14     while(true)
    15     {
    16         while(a[++i]<x&&i<r);
    17         while(a[--j]>x);
    18         if(i>=j)
    19             break;
    20         swap(a[i],a[j]);
    21     }
    22     a[l]=a[j];
    23     a[j]=x;
    24     return j;
    25 }
    26 void qsort(int a[],int l,int r)
    27 {
    28     if(l<r)
    29     {
    30         int index=parttion(a,l,r);
    31         qsort(a,l,index-1);
    32         qsort(a,index+1,r);
    33     }
    34 }
    35 int main ()
    36 {
    37     qsort(a,0,3);
    38     return 0;
    39 }
    基本的快速排序

    刚才现写了一个,发现啊a[++j]的自增运算符的位置放反了。

    然后是使用C++风格结构体的多关键字快排:

     1 #include<stdio.h>
     2 #include <stdlib.h>
     3 #include<time.h>
     4 struct Node{
     5     int a;
     6     int b;
     7     Node()
     8     {
     9         a=0;
    10         b=0;
    11     }
    12 };
    13 int compare(Node a,Node b)
    14 {
    15     if(a.a==b.a)
    16         return a.b-b.b;
    17     else
    18         return a.a-b.a;
    19 }
    20 void swap(Node &m,Node &n)
    21 {
    22     Node temp=m;
    23     m=n;
    24     n=temp;
    25 }
    26 int partion(Node a[],int l,int r)
    27 {
    28     int i=l,j=r+1;
    29     Node x=a[l];
    30     while(true)
    31     {
    32         while(compare(a[++i],x)>0&&i<r);
    33         while(compare(x,a[--j])>0);
    34         if(i>=j)break;
    35         else
    36             swap(a[i],a[j]);
    37     }
    38     a[l]=a[j];
    39     a[j]=x;
    40     return j;
    41 }
    42 void qsort(Node a[],int l,int r)
    43 {
    44     if(l<r)
    45     {
    46         int p=partion(a,l,r);
    47         qsort(a,l,p-1);
    48         qsort(a,p+1,r);
    49     }
    50 }
    51 Node a[10];
    52 int main()
    53 {
    54     srand((unsigned int)time(0));
    55     for(int i=0;i<10;i++)
    56     {
    57         a[i].a=rand()%(10+1-0)+0;
    58         a[i].b=rand()%(10+1-0)+0;
    59 
    60     }
    61     qsort(a,0,9);
    62     for(int i=0;i<10;i++)
    63     {
    64         printf("%d %d
    ",a[i].a,a[i].b);
    65     }
    66 }
    多关键字快速排序
  • 相关阅读:
    Vue路由配置
    vue项目 favicon.ico不显示解决方案
    Vux使用AjaxPlugin发送请求跨域问题解决
    改变vux样式,自定义样式
    Hive LLAP
    GitHub提交代码无contributions记录解决办法
    Java websocket+ nginx+redis负载均衡上实现单对单通讯
    springboot异步接口
    C#中$的用法(转载)
    vmware-tools灰色而无法安装的问题
  • 原文地址:https://www.cnblogs.com/holyprince/p/3314842.html
Copyright © 2011-2022 走看看