zoukankan      html  css  js  c++  java
  • POJ 2388

    排序的水题,主要拿来测试了一下快速排序和归并排序哪个速度快一点。

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 void merge(int num[],int st,int md,int ed)
     5 {
     6     int l_len=md-st+1,r_len=ed-md;
     7     int l[l_len+2],r[r_len+2];
     8     for(int i=1;i<=l_len;i++) l[i]=num[st+i-1]; l[l_len+1]=2147483647;
     9     for(int i=1;i<=r_len;i++) r[i]=num[md+i]; r[r_len+1]=2147483647;
    10     int i=1,j=1;
    11     for(int k=st;k<=ed;k++)
    12     {
    13         if(l[i] <= r[j]) num[k]=l[i++];
    14         else num[k]=r[j++];
    15     }
    16 }
    17 void merge_sort(int num[],int st,int ed)
    18 {
    19     if(st < ed)
    20     {
    21         int md=st+(ed-st)/2;
    22         merge_sort(num,st,md);merge_sort(num,md+1,ed);
    23         merge(num,st,md,ed);
    24     }
    25 }
    26 
    27 int partition(int num[],int st,int ed)
    28 {
    29     int x=num[ed],i=st;
    30     for(int j=st;j<=ed-1;j++)
    31     {
    32         if(num[j]<=x)
    33         {
    34             int temp;temp=num[i],num[i]=num[j],num[j]=temp;
    35             i++;
    36         }
    37     }
    38     int temp=num[i];num[i]=num[ed];num[ed]=temp;
    39     return i;
    40 }
    41 void quick_sort(int num[],int st,int ed)
    42 {
    43     if(st < ed)
    44     {
    45         int md=partition(num,st,ed);
    46         quick_sort(num,st,md-1);quick_sort(num,md+1,ed);
    47     }
    48 }
    49 int main()
    50 {
    51     int num[10005],n;
    52     scanf("%d",&n);
    53     for(int i=1;i<=n;i++) scanf("%d",&num[i]);
    54     merge_sort(num,1,n);
    55     //quick_sort(num,1,n);
    56     printf("%d
    ",num[(n+1)/2]);
    57 }

    当然单纯的一道题目其实完全说明不了什么问题……

    顺手再贴一个写法更加得劲儿一点的归并排序……

     1 void merge(int l,int m,int r)
     2 {
     3     int i = l;
     4     int j = m + 1;
     5     int k = l;
     6     while(i <= m && j <= r)
     7     {
     8         if(num[i] > num[j])
     9         {
    10             tmp[k++] = num[j++];
    11         }
    12         else
    13         {
    14             tmp[k++] = num[i++];
    15         }
    16     }
    17     while(i <= m) tmp[k++] = num[i++];
    18     while(j <= r) tmp[k++] = num[j++];
    19     for(int i=l;i<=r;i++) num[i] = tmp[i];
    20 }
    21 void merge_sort(int l,int r)
    22 {
    23     if(l < r)
    24     {
    25         int m = (l + r) >> 1;
    26         merge_sort(l,m);
    27         merge_sort(m+1,r);
    28         merge(l,m,r);
    29     }
    30 }



  • 相关阅读:
    uva-10160-枚举
    zk-systemd
    c++官方文档-枚举-联合体-结构体-typedef-using
    c++官方文档-动态内存
    c++官方文档-指针
    c++官方文档-命名空间
    c++官方文档-模版函数和重载
    c++官方文档-按值传递和按引用传递
    c++官方文档
    HDU 1068
  • 原文地址:https://www.cnblogs.com/dilthey/p/6804152.html
Copyright © 2011-2022 走看看