算法学习之一 —— 七种排序算法及其时间复杂度

来源:互联网 发布:js防水涂料重量 编辑:程序博客网 时间:2024/05/24 06:42

突然间想到一句话,以自己写的代码量之低,还不到比较算法的地步。

在大型服务机面前,似乎一切的时间复杂度和空间复杂度都不是问题,所多出的那一点在摩尔定律面前几乎不堪一击。但时代的变化趋势确实智能机日益普及,诚然在工业方面我们有越来越多的资源可供利用,但在更接近社会本身、财富本身的移动互联网上,”小“才是主流。它意味着你需要越少的空间开销,需要你争分夺秒的节省用户触屏时间。仅仅是一项最简单的通讯录索引,都几乎意味着排序、二分、概率补全的应用,更不用说从大量数据方面分析客户的行为习惯,机器学习、图像识别几乎就是数学的天下。

编程不仅仅是语法,那是最基本的。Algorithm,才是开山利刃。

 

首先要讲的是冒泡算法。时间复杂度达到了0(n^2),几乎你可以认为在n无限大时,达到了n^n的指数级别时间复杂度,不适用于大量数据的排序。但在小部分数组排序时,冒泡排序的代码最为简洁,方便书写(如果不考虑STL里的sort(),这之后还会提到)。

思路如下:

1.将每一次的最大值/最小值依次放到数组的队列尾/首。这需要依次比较第1-2,2-3,,(n-1)-n项。之后只需要比较1-2,2-3,,(n-2)-(n-1)项。

2.一直到n=1时,排序结束。

按照定义我写了两种代码,分别体现了不同的编程思路:

for(i=0;i<n;i++)   for(j=1;j<n-i;j++) //if(a[j-1]>a[j] swap(a[j-1],a[j]);


0 0