博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【读书笔记】理解基本排序算法
阅读量:4655 次
发布时间:2019-06-09

本文共 2241 字,大约阅读时间需要 7 分钟。

开始日期:2018/07/23

前言

近段时间一直在阅读《数据结构与算法JavaScript描述》这本书,重新学习下算法。算法是作为一个程序员的基本素养,还是掌握一些基本的算法的,譬如排序算法。排序算法又分为基本排序算法和高级排序算法,以排序的效率来划分。以下的冒泡排序就是基本排序算法,最慢的排序算法之一。

冒泡排序

最慢的排序算法之一,数据值会像气泡一样从数组的一端飘向另一端。之所以会产生这种现象是因为算法会多次在数组中移动,比较相邻的数据,假设按升序排序,则当左侧值大于右侧值时将它们进行互换。

示例代码:

function bubbleSort(arr){            var length = arr.length;            // 数组交换方法            var swap = function(arr,index1,index2){                var temp = arr[index1];                arr[index1] = arr[index2];                arr[index2] = temp;            }            // 外循环则表示相邻比较的次数,比较一次后,最大的数会移向最右侧,则次数减一,进行下一轮循环            for(var outer = length; outer >= 2; --outer){            // 内循环则表示从第一个数值开始相邻比较,一直到最后一个                for(var inner = 0; inner< outer; ++inner){                    if(arr[inner]>arr[inner+1]){                    swap(arr,inner,inner+1);                    }                }            }            return arr;        }

选择排序

选择排序从数组的开头开始,将第一个元素和其它元素进行比较。检查完所有的元素后,最小的元素会被放到数组的第一个位置,然后算法会在第二个位置继续。这个过程一直进行,当进行到数组倒数的第二个位置时,所有的数据便完成了排序。选择排序会用到嵌套循环。外循环从数组的第一个元素移动到倒数第二个元素,因为是从第一个跟其它元素比较,所以循环到倒数第二个时,则与最后一个元素比较。内循环则从第二个数组元素移动到最后一个元素,查找比当前外循环所指向的元素小的元素。

示例代码:

function selectionSort(arr){            var min;            var swap = function(arr,index1,index2){                var temp = arr[index1];                arr[index1] = arr[index2];                arr[index2] = temp;            }            for(var outer = 0; outer <= arr.length-2;++outer){                min = outer;                for(var inner = outer+1; inner <= arr.length-1;++inner){                    if(arr[inner]

插入排序

插入排序类似于人类按数字或字母顺序对数据进行排序。插入排序有两个循环。外循环将数组挨个移动,而内循环则对外循环选中的元素及它后面的那些元素进行比较。如果外循环选中的元素比内循环中选中的元素小,则数组会向右移动,为内循环中的这个元素腾出位置。外循环从第二个元素开始,因为默认与第一个比较,比较完后,从三个元素开始与前面两个元素进行比较,后面的以此类推,如果比前面的元素大则不用换位置,否则向前面插入,后面的元素往后移动。

示例代码:

function insertionSort(arr){    var temp,inner;    for(var outer = 1; outer <= arr.lengtn -1 ; ++outer){        temp = arr[outer];        inner = outer;        while(inner > 0 && arr[inner-1] >= temp ){            arr[inner] = arr[inner-1];            —-i;        }        arr[inner] = temp;    }}

基本排序算法的时间复杂度比较

686913-20180828153713915-1347933753.png

基本排序算法计时比较

经测试,对于100个元素执行排序,三种算法没有显著差别。

对于10000个元素排序,选择排序和插入排序要比冒泡排序快,插入排序是这三种算法最快的。

转载于:https://www.cnblogs.com/GeniusLyzh/p/9548587.html

你可能感兴趣的文章
kafka在zookeeper中的存储结构
查看>>
[Canvas学习]动画
查看>>
字典集合
查看>>
linux上FTP服务器搭建
查看>>
MySQL 用户登录与操作执行
查看>>
hdu 1506 Largest Rectangle in a Histogram dp
查看>>
15.sqoop数据从mysql里面导入到HDFS里面
查看>>
Windows Form (C#) 进度条处理
查看>>
杂项_想蹭网先解开密码
查看>>
C#微信开发之旅(十三):V2订单查询&退款(完结)
查看>>
FSO 读取/写txt文本乱码的解决
查看>>
华为机试测试-dna-字符串
查看>>
JSON序列化和解析
查看>>
20150221—LINQ to SQL 查询数据
查看>>
asp.net Mvc 访问静态页面
查看>>
数据结构和算法 — 平衡二叉树的实现
查看>>
帝国CMS判断会员是否登录及登录后才能看到内容的方法
查看>>
使用三大框架实现文件的上传及下载
查看>>
理解 HTTP2.0
查看>>
小米手机安装mitmproxy证书
查看>>