• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 请教一种大量数据的快速排序的方法

请教一种大量数据的快速排序的方法

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了请教男睡裤裁剪方法,请教我恋爱的方法,请教会议速记方法,请教金鱼饲养方法,请教我盗qq号的方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:请教一种大量数据的快速排序的方法
描述:

目前我有大量的数据(5万左右),比如(32,3,4,2,34,5466,223,45。。。)
我想请教一种能够快速排序的方法。 目前尝试过了 quicksort(快速排序) 和 mergesort(归并排序), mergesort 的排序更快一些,但是速度还不是很理想。 请问有没有比 mergesor 更加快的排序方法?

万分感谢


解决方案1:

5万数据也算大?

好吧,如果你的数据本身数字不是很大,只是数据量大的话,可以试试桶排。拿下标作答。复杂度是 O(MAXN),MAXN指的是你最大的那个数字大小。

for(int i = 0; i < n; i++)
{
    sort[arr[i]]++;
}

for(int i = 0; i < MAXN; i++)
{
    for(int j = 0; j < sort[i]; j++)
    {
        printf("%d ", i);
    }
}

解决方案2:

如果本身就有序的情况下,时间复杂度会降到O(n^2)

解决方案3:

5W算不上大数据
5W做快排的时间还是很轻松的,你觉得慢可能是实现不大好。5W行的数据在shell里直接用个sort很是很轻松的,如果是编程排的话,任何语言内建的排序都不会太慢。
也可能是遇到快排的最差情况,可以通过随机化办法来优化,让快排不容易跌入最差情况

如果你的数据量大,但是数据范围很小,可以使用统计排序(也称为“桶排序”)或者基数排序

解决方案4:

1.5W数据不算大。快排原地排序很快。O(nlogn)的时间复杂度。不需要额外空间,是最合适的。
2.要更快,可以考虑基数排序,前提是数据的范围是已知的。时间复杂度是O(n)。需要额外空间。
3.数据如果是无重复且范围已知,可采用bitmap,速度非常快。

解决方案5:

quicksort+random+小规模冒泡+三路划分。

解决方案6:

看一下每个元素的范围,如果幅度不是很大,可以考虑桶排序(我这边是这么叫的)
号称是 O(n) 的时间复杂度
另外我想了解你一下你所用的语言?我是从你另外一个帖子里找过来的,感觉你学的都是面向应用的语言,这些语言在速度上本身不具有太大的优势。
一般这种大数据排序的任务会交给后端,后端一般使用高效的语言,排个5W的数据毫无压力。

解决方案7:

记得快速排序的平均时间复杂度是 nlog(n),你可以进行一次快速排序以后,两个线程处理,然后再快排一次,四个线程处理。。。或者你可以处理一下你的 key 值,尽量让左右两边的个数相等,时间复杂度达到 nlogn。要么就堆排序,最坏情况也是 nlogn.我能想到的,希望能有帮助。

解决方案8:

5w的大数据...

数据量太小, 排序算法除了时间复杂度, 也需要考虑常系数. 试试希尔排序吧.

解决方案9:

5w也叫大数据。。。。
quick sort 一眨眼就排序好了

解决方案10:

切分到多台机器上排序,然后做n-way merge。
不过5万这种量还真犯不上这么麻烦。

基于比较的排序,其时间复杂的理论下限是O(N*log(N)),常见的quick sort、heap sort、merge sort都在此列,所以你就不要在这个事情上再浪费时间了。
如果数字本身有一定特征,比如都是[n1, n2]区间内的整数,你可以用基数排序、桶排序之类不基于比较的算法,它们的时间复杂度可以低至O(N),但是空间复杂度至少是O(N)。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 再请教一个python中正则表达式的问题谢谢
  • 分析文件后,记录入库请教
  • 再请教个正则表达式
  • 请教下python中的作用是什么
  • 正则表达式替换请教一个正则表达式分组替换的问题
  • 请教,怎么用python做简单的像素级碰撞检测
  • 请教如何模拟如下地址
  • 正则表达式请教一个正则表达式,限制只能输入正确的数字字符串
  • 《笨方法学python》一个例子没有运行出来,请教!
  • 请教我恋爱的方法请教个pythonhttplib2传递参数问题

相关文章

  • 2017-06-07 七牛云存储alliancejs?_y=1455933:1文件报错
  • 2017-06-07 (python)virtualenvwrapper环境的的备份思路?
  • 2017-06-07 自定义域名cname解析后多久生效?
  • 2017-06-07 laravellaravel数据库字段json格式时报错
  • 2017-06-07 Android上传图片到七牛后,如何在代码中得到图片的外链地址?
  • 2017-06-07 Python用Py2exe打包脚本找不到Win32api模块
  • 2017-06-07 资源的访问是否可以不用80端口?
  • 2017-06-07 如何将一个jar包配置到java的环境变量/CLASSPATH?(不是一个工程的CLASSPATH)
  • 2017-06-07 OSX中的Amethyst应用如何保存配置?
  • 2017-06-07 (VFP)SQL表中的nchar类型字段是空白时,为什么字段中显示小方框?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用Sublime2编写Lua时怎么设置函数模板的正则表达式?
    • (shell)linux文本替换命令,救救小白。。
    • (python)为什么easy_installMySQLdb提示没找到包
    • 文本单趟匹配问题
    • 想提供子域名给客户顶级域名CNAME解析,在被解析的子域名端需要怎样设置?DNS及服务器
    • (python)'module'objecthasnoattribute'ANTIALIAS_FAST'
    • scrapy抓取网页后生成的json文件大小为0kb
    • Python正则r'\s+'与r'\s+'的区别
    • 请教python273环境下同时安装cx_Oracle和werkzeug的编码问题!
    • (python)微信公众号,获取openID

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有