zoukankan      html  css  js  c++  java
  • 如何在很大数量级的数据中(比如1个亿)筛选出前10万个最小值?之六

    小结一下:

    对这个问题,到目前,我们得到了两段比较好的代码:堆选择与快速选择。

    堆选择,是我根据维基百科/堆排序/C++代码,改写得。

    快速选择,为ExcelHome的知名网友香川群子所写。她并指出,该代码去掉提前退出的条件,即为快速排序。即:

    void SortQuick(int data[], int Low, int High)
    {
      int low= Low,   high= High;
      for(int key= data[(Low+High)/2]; low< high; )
      {
        for( ; low< High && key> data[low]; ) low++;
        for( ; Low< high && key< data[high]; ) high--;
        if(low<= high) swap(data[low], data[high]), add+= low==high, low++, high--;
      }
      if(low< High) SortQuick(data, low,  High);
      if(Low< high) SortQuick(data, Low, high);
    }
    

      应该加个对外的函数接口:

    void QuickSort(int data[], int m)
    {
      SortQuick(data, 0, m-1);
    }
    

      快速选择,本质是将数据分成两组。因此,这里称它为分组方式。简称分组。

    那么,这两个好的代码之间来比较。会是怎么样一个结果呢?

    我做了一下。当选择为百选一,两者速度相当。堆略快。千选一,堆快。十选一,分组快。

    前面这些代码,尤其是这两段好代码。为我们处理更大数据量。打下了一个基础。

    这个总结,也算为之后的工作,作一个广告。

  • 相关阅读:
    VOA 翻译研讨:2009.2.26 教育报道——在美国学习:网络重新阐释学院之旅
    javac Java 编程语言编译器的使用文档
    在Eclipse中集成Ant编程之配置篇
    ANT使用范例
    MySQL实用命令
    [转]java多线程同步
    Perl 教学 列表和数组变量
    MySql常用命令总结
    MySQL 备份和恢复
    log4j配置详解
  • 原文地址:https://www.cnblogs.com/oldtab/p/4449486.html
Copyright © 2011-2022 走看看