zoukankan      html  css  js  c++  java
  • HDU1425 sort

    问题链接HDU1425 sort基础训练题,用C语言编写程序。

    问题简述:参见上述链接。

    问题分析本问题是对于n个数据,求最大的m个元素。类似于求第k小元素问题,可以用分治法来实现。基于快速排序(Quicksort)算法程序,略作修改就可以实现。

    前m个元素(大的元素)使用快速排序,后面的元素(小的元素)就不需要排序。

    程序说明:(略)。

    AC的C语言程序如下:

    /* HDU1425 sort */
    
    #include <stdio.h>
    
    #define MAXN 1000000
    
    int data[MAXN];
    
    // 划分:大的放在主元的左边,小的放在主元的右边
    int split(int a[], int low, int high)
    {
      int part_element = a[low];
    
      for (;;) {
        while (low < high && part_element >= a[high])
          high--;
        if (low >= high) break;
        a[low++] = a[high];
    
        while (low < high && a[low] >= part_element)
          low++;
        if (low >= high) break;
        a[high--] = a[low];
      }
    
      a[high] = part_element;
      return high;
    }
    
    // 找出最大的m个数:使用分治法,在快速排序的基础上修改而成
    void mmaxsort(int a[], int low, int high, int m)
    {
      int middle;
    
      if (low >= high) return;
      middle = split(a, low, high);
    
      mmaxsort(a, low, middle - 1, m);
      // 只需要考虑左边的m个元素,其他部分不用排序
      if(middle + 1 < m)
        mmaxsort(a, middle + 1, high, m);
    }
    
    int main(void)
    {
        int n, m, i;
    
        while(scanf("%d%d", &n, &m) != EOF) {
            // 读入数据
            for(i=0; i<n; i++)
                scanf("%d", &data[i]);
    
            // 排序
            mmaxsort(data, 0, n-1, m);
    
            // 输出结果
            for(i=0; i<m; i++) {
                if(i)
                    printf(" ");
                printf("%d", data[i]);
            }
            printf("
    ");
        }
    
        return 0;
    }


  • 相关阅读:
    【浏览器】谷歌浏览器快捷键
    【问题】html页面不能自动更新,重启项目也不行。package时可以。
    Hibernate与mybatis的区别
    ssh的执行流畅
    ssm执行流程
    struts的上传下载
    HTML列表
    什么是HTML,HTML的简介,HTML结构
    hadoop hdfs 分布式存储
    面向对象的七大原则
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564561.html
Copyright © 2011-2022 走看看