`
qinya06
  • 浏览: 600516 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一亿个浮点数的排序算法

阅读更多
有1亿个浮点数,请找出其中最小的10000个。提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相当大的空间,因此不能一次将全部读入内存进行排序。
问题分析:
1) 1亿个浮点数,其数据大小为 400 M。如此规模的排序,首先想到分批处理。每次读取 1 000 000 个数据并进行快速排序。需要的内存空间为 1 000 000 * 4  = 4M。需要100 次这样的排序。

2)完全没的规律的数据,考虑使用快速排序。快速排序的平均复杂度是 O( Nlog(N) )。我们可以直接使用 stl 提供的全局函数 sort() , 它使用了快速排序算法(实际是三平均分区法 median-of-three )。
3) 最后只要最大的 10000 个。则每个批次只需要保留排序结果的前 10000 个数据。这段数据已经是分段有序的。数据量为 10000 * 100。

分享到:
评论

相关推荐

    2.5亿个浮点数的外部排序报告1

    【描述】:针对大规模的浮点数排序问题,本报告介绍了一种利用C#实现的解决方案,特别是对于2.5亿个可能格式不一致的IEEE754标准浮点数。策略包括分块读取大文件、自定义快速的浮点数解析、基数排序和败者树多路归并...

    面试之大数找关键值(如从10亿个浮点数中找出最大的1万个)

    首先,我们可以想到的方法是建立一个数组把1亿个数装起来,然后用for循环遍历这个数组,找出最大的1万个数来。这种方法的时间复杂度为O(n*m),其中n是数组的大小,m是要找出的最大数的个数。然而,这种方法的运行...

    采用各种排序算法,支持任意类型数据的小型排序系统

    本项目是一个小型的排序系统,其核心特点在于能够处理任意类型的数据,并且采用了五种不同的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及堆排序。下面将详细探讨这些知识点。 首先,**泛型**是Java...

    基于FPGA的浮点数线性排序器设计.pdf

    浮点数排序器的设计采用了N个排序节点串联,形成一个完整的排序器。其中,N表示待排序数据的数量。为了保证排序过程的高效执行,采用流水线的方式,通过两个系统状态标签来驱动节点内的控制逻辑,以此确定新数据的...

    使用C语言实现浮点数的冒泡排序算法代码

    使用C语言实现浮点数的冒泡排序算法代码

    C++大作业 排序算法集合

    随机产生10000个浮点数,保存到a.txt文件中,再读取到内存中并分别用简单选择排序、冒泡排序、快速排序、希尔排序、归并排序、堆排序算法进行排序,显示排序过的数列的第1、10、100、1000、10000的具体数字和每个...

    最经典的8大排序算法总结

    二叉树排序是基于二叉搜索树实现的排序算法,它首先将元素插入到一个二叉搜索树中,然后执行中序遍历来输出有序的元素序列。它的时间复杂度取决于树的结构,平均情况下是O(nlogn),最差情况下为O(n^2),空间复杂度为...

    Radix Sort (基数排序)排序算法

    下面是一个基于Java语言的基数排序算法实现示例: ```java import java.util.*; class NumNode { byte[] data; NumNode next; NumNode(int ch, NumNode new_node) { int i = 0; data = new byte[10]; // ...

    十种排序算法介绍十种排序算法介绍

    - **原理**: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表...

    浮点数编码的遗传算法及其应用

    本文提出的浮点数编码遗传算法(FGA)为解决多极值函数全局优化问题提供了一个有效的解决方案。相较于传统的二进制编码遗传算法,FGA不仅简化了编码过程,提高了计算效率,而且在优化精度方面表现优异。未来的研究...

    排序算法的实现

    在编程领域,排序算法是计算机科学中的核心概念,特别是在数据处理和数据分析方面。本文将详细介绍在C语言中实现的八种排序算法,并探讨每种算法的工作原理、性能特点以及适用场景。 1. 冒泡排序(Bubble Sort): ...

    JAVA排序算法集合

    快速排序是一种高效的排序算法,采用了分治法的策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序的关键在于选择合适的基准值。 **时间复杂度**: - 最好情况:O(n log n),当每次...

    排序算法的稳定性和时间复杂度小结

    - **定义**:快速排序是一种非常高效的排序算法,采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。 - **时间复杂度**:平均情况下的时间复杂度为O(n log n),最坏情况下为O(n^2)...

    java常见八种排序算法

    在编程领域,排序算法是计算机科学的基础之一,尤其是在Java这样的高级编程语言中。排序算法用于组织数据,使得数据按照特定顺序排列,这对于数据分析、数据库管理等应用至关重要。本篇文章将详细探讨Java中常见的八...

    冒泡排序算法的C++函数模板

    首先,我们定义了一个整数数组a和一个浮点数数组b,然后使用BubSort函数对它们进行排序。最后,我们输出排序后的结果。 冒泡排序算法的时间复杂度为O(n^2),空间复杂度为O(1)。因此,它适用于小规模的数据排序,但...

    数据结构排序算法

    ### 数据结构排序算法详解 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有...

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...

    排序算法总结和比较

    它选择一个支点,将数组分为两部分,一部分所有元素小于支点,另一部分所有元素大于支点,然后对这两部分递归进行快速排序。快速排序在平均情况下的时间复杂度为O(nlogn),但需要递归,可能不适合内存有限的情况。 ...

    c实现十种排序算法

    在IT领域,排序算法是计算机科学中的基础但至关重要的概念,尤其对于编程初学者和专业开发者来说。本文将深入探讨标题为“C实现十种排序算法”的资源中包含的算法,以及它们的工作原理和优化。 1. **冒泡排序**...

    基数排序算法 java实现

    基数排序算法的一个优点是稳定,即相等的元素在排序后不会改变它们原有的相对顺序。此外,由于其线性的复杂度,基数排序在处理大量数据时比许多其他排序算法更高效。然而,它并不适用于浮点数或非整数类型的数据,且...

Global site tag (gtag.js) - Google Analytics