今天想做测试各个排序算法运行时间比较的程序,来对这几天学的排序算法小结一下。所以我先生成了1000000个1~150之间的随机数存到文件里。然后做了一个测试运行时间的程序。想看一下结构。但是结果效果并不太好。实践中,自己做的qsort函数和mergesort函数并没有理想中的那么快。

结果是这样:(可能并不准确,但却是是运行结果)

库函数快速排序:0.139000 seconds
自制快速排序:0.375000 seconds
归并排序:0.358000 seconds
堆排序:0.525000 seconds
计数排序:0.032000 seconds
插入+归并排序:0.313000 seconds

显然,除了线性复杂度的计数排序,其他的都比系统自带的库函数运行的慢。

因此得出以下结论:

1.懂了算法思想并不一定能做出最棒的程序。

2.以后排序首选系统自带库函数和计数排序,其他的排序算法可以当作思想来借鉴。

那么排序算法大体就到这里。下一节一开始讲的是最值的选法。

从n个数里选出最小值。复杂度下界是n

从n个数里选出最大值。复杂度下界也是n

但是,从n个数里同时选出最小值和最大值,算法导论给出了复杂度(3/2)n的优化算法。

就是通过一个一个的比较改成一对一对的比较

每次找两个数,先比较这两个数,然后让较大值与当前的最大值比较,让较小值与当前最小值比较。这样优化之后,原来每两个数要比较4次,现在只需要比较3次,所以复杂度优化成了原来的3/2 。

代码今天就先不打了,这个问题比较简单。可能需要分n为奇数还是偶数讨论一下。

PS:下面是测试排序时用到的生成随机数和测试时间的代码。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int *makerandom(int n,int x)
{int *a=(int *)malloc((n+1)*sizeof(int));srand(time(0));int i;for (i=1;i<=n;i++) {a[i]=rand()%x+1;}return a;
}

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main()
{long i=100000000L;clock_t start,finish;double duration;start=clock();/*while (i--);*/  //测试时间的代码 finish=clock();duration=(double)(finish-start)/CLOCKS_PER_SEC;printf("%lf seconds\n",duration);return 0;
}

转载于:https://www.cnblogs.com/itlqs/p/5107838.html

算法导论6:排序小结和最值取法 2016.1.6相关推荐

  1. 算法导论 — 比较排序算法对比实验

    <算法导论>这本书介绍了5种比较排序算法:插入排序.冒泡排序.归并排序.堆排序.快速排序.我们现在通过实验来对比这5种排序算法的运行时间.用随机数发生器生成不同长度的数组,将每种算法应用于 ...

  2. 算法导论——计数排序

    2019独角兽企业重金招聘Python工程师标准>>> /*** 计数排序* * 不用比较的排序算法,时间可以突破O(NlgN)* * 时间复杂度O(N),稳定* * 适用于所有需要 ...

  3. 算法导论之排序和顺序统计学

    排序:对N个数的序列重排过程.待排序的数,一般是选择记录中数据集的关键字key作为排序的值,而数据集中其他数据(称为:卫星数据)以key为中心移动.实际上,对于排序过程中,key的移动和交换,卫星数据 ...

  4. 算法导论之排序算法(1)

    排序问题数据结构(引入):在实际中,待排序的数很少是单独的数值,它们通常是成为记录的数据集的一部分.每个记录包含一个关键字,就是排序问题中要重排的值.记录的剩余部分由卫星数据组成,通常与关键字是一同存 ...

  5. 《程序员面试金典》+《算法导论》

    <程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...

  6. 【算法导论】 内部排序算法总结

    排序名称 时间复杂度 空间复杂度 稳定性 直接插入排序 O(n^2) O(1) 稳定 折半插入排序 O(n^2) O(1) 稳定 希尔排序 O(n^2) O(1) 不稳定 冒泡排序 O(n^2) O( ...

  7. 时间排序python_算法导论 第八章 线性时间排序(python)

    比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...

  8. 算法导论5:基数排序和计数排序 2016.1.5

    今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序. 其实这种比较方法我们应该都接触过.假设输入的数都是三 ...

  9. Java黑皮书课后题第7章:**7.18(冒泡排序)使用冒泡排序算法编写一个排序方法。编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字

    **7.18(冒泡排序)使用冒泡排序算法编写一个排序方法.编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字 题目 题目描述 冒泡排序法 / 下沉排序法 破题 代码 运 ...

最新文章

  1. 001_python单元测试
  2. IOS树视图学习总结
  3. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
  4. mysql 某列加全文索引_MySQL使用全文索引(fulltext index)---高性能
  5. swift语言 数组定义_如何在Swift中声明弱引用数组?
  6. mysql配合memcache部署_Docker多容器配合实现开发环境(nginx、php、memcached、mysql)...
  7. 三丰三坐标编程基本步骤_日常皮肤护理的基本三步骤,问题皮肤不要作
  8. 2012年7月19日 解一元二次方程
  9. actor模型 java框架,actor模型(actor模式优缺点)
  10. win11改成win7界面的设置方法
  11. VFP全面控制EXCEL
  12. php 度分秒和小数转化
  13. Python 爬取百万网易云音乐热门评论
  14. url 转码 (含中文)%3A转换成“:”,%2F转换成“/”
  15. 3.3 Apache的管理及优化
  16. Technical Artist 的不归路 —— 场景构图中的物件
  17. CocoaChina 允许iOS开发者相互推广自己的作品,发码大师相当不错!
  18. 云P3芯片助力传统MP3迈向新阶段
  19. mp4box工具包下载
  20. mysql varchar类型实例_Mysql实例MySQL数据类型varchar详解

热门文章

  1. BeginPaint和GetDC有什么区别?【转】
  2. java开发环境以及数据类型
  3. 数据库-Windows启动和停止mysql
  4. java 反射 镜子,java反射机制 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区...
  5. python显示界面后1秒自动隐藏_使用Python+Qt时解决QTreeWidget中的内容超出边界后自动隐藏的问题...
  6. 小程序 pc版 缓存路径_WordPress版微信小程序3.5版发布
  7. python水印_Python如何为图片添加水印
  8. 根据序列选择自回归模型(AR、ARMA、VAR、VMA、VECH)
  9. python turtle详细教程_python 中的turtle使用教程
  10. linux18.04忘记账号密码,Ubuntu18.04忘记超级用户root密码,重新设置密码