
基本排序算法
发布日期:2021-05-07 10:15:44
浏览次数:21
分类:技术文章
本文共 1970 字,大约阅读时间需要 6 分钟。
大家接触编程辣么久了,不知道有没有听说过这样一个说法——对计算机中储存数据执行的最常见的两种操作是排序和检索。不知道你们信不信,反正我信了。最基本的排序方法有三种,分别是冒泡、选择和插入。下面就给大家分别介绍一下这三种基本排序方法的javaScript实现。
首先,声明一个测试类,这个测试类包含了后面将要用到的排序方法
//测试类function CArray(elements){ this.dataStore=[]; this.elements=elements;//elements为数组长度 this.insert=insert; this.toString=toString; this.clear=clear; this.setData=setData;//初始化数组的方法 this.bubbleSort=bubbleSort;//冒泡 this.selectSort=selectSort;//选择 this.insertSort=insertSort;//插入 for(var i=0;i
一、冒泡排序
冒泡排序的基本原理是比较相邻的数值,当左值大于右值时交换他们的位置,多次循环。冒泡排序是最慢的排序算法之一,但却最好实现//冒泡排序function bubbleSort(){ //设置n为数组长度 var n=this.elements; //外循环一共进行n-1次,按原理每个元素都会与其他元素进行比较以确定其正确位置,应执行n次,但到第n-1次时只剩下两个元素未排序,交换之后就相当于同时确定了两个元素的位置 for(var outer=n;n>=2;n--){ //内循环选出该趟最大值 for(var inner=0;inner<=outer-1;inner++){ if(this.dataStore[inner]>this.dataStore[inner+1]){ swap(this.dataStore,inner,inner+1); } } }}
二、选择排序
选择排序从第一个元素开始,将第一个元素与其他元素比较,最小的元素会被交换到第一个位置,然后移到第二个元素以此类推//选择排序function selectSort(){ var min; var n=this.elements; //外循环进行n-1次,因为进行到第n-1次,最大的元素与第二大元素进行交换,相当于同时确定两个元素的位置 for(var outer=0;outer<=n-2;outer++){ min=outer; for(var inner=outer+1;inner<=n-1;inner++){ if(this.dataStore[inner]
三、插入排序
插排类似于我们打麻将时码牌的过程,排序时,数组分为两部分,前面一部分为排好序的元素,后一部分为没有排好序的部分。每次排序就将最前面一个未排序的元素在前面已经排好序的元素中找到自己的位置function insertSort(){ var inner,temp; var n=this.elements; //outer可理解为带排序元素的下标,下标比outer小的元素都已排好序 for(var outer=1;outer<=n-1;outer++){ //temp为带排序元素 temp=this.dataStore[outer]; for(inner=outer;inner>0;){ //如果temp前面一个元素比它大,则交换位置 if(this.dataStore[inner-1]>=temp){ swap(this.dataStore,inner-1,inner); inner--; }else{ break; } } }}
一般来说,在三种基本排序算法中,选择和插入要比冒泡快,插入排序是最快的一种。不过在处理较小数量数据的时候,三种排序方式看不出明显差别,而大数量数据的排序则需要更高级的算法才高效,之后我会为大家分享希尔、快速、归并和堆排序四种高级排序算法。
发表评论
最新留言
不错!
[***.144.177.141]2025年03月19日 03时08分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue面试题总结
2019-03-04
实现一个简易Vue(三)Compiler
2019-03-04
仿小米商城(上)
2019-03-04
仿小米商城(下)
2019-03-04
【30】kotlin 闭包
2019-03-04
文件md5怎么会变化
2019-03-04
好玩的editText
2019-03-04
自动安装服务2
2019-03-04
edittext弹出键盘或者隐藏键盘
2019-03-04
android用视频当做背景
2019-03-04
android 用action拦截打电话界面
2019-03-04
打包命名
2019-03-04
Android UI效果篇-(3)用属性动画实现收缩菜单
2019-03-04
Android反编译-揭秘猎豹设置默认浏览器逻辑
2019-03-04
错误: 编码GBK的不可映射字符
2019-03-04
python3 读写Excel
2019-03-04