咱们在这说一下基本的排序算法吧!

以下主要说到基础的三种排序【冒泡,选择,插入】,处理大量数据的【快排】

先说一下原理:

1、冒泡排序:

冒泡排序是因为使用这种排序算法排序时,数据值会像气泡一样从数组的一端漂浮到另一端。假设正在将一组数字按照升序排列,较大的值会浮动到数组的右侧,而较小的值则会浮动到数组的左侧。之所以会产生这种现象是因为算法会多次在数组中移动,比较相邻的数据,当左侧值大于右侧值时将它们进行互换。

    //冒泡排序bubbleSort() {for(var i = 1; i< this.data.length; i++) {for(var j = 0; j< this.data.length -i; j++) {if(this.data[j] < this.data[j+1]) {var temp = this.data[j];this.data[j] = this.data[j+1];this.data[j+1] = temp;}}}return this.data}

2、选择排序:

选择排序会用到嵌套循环。外循环从数组的第一个元素移动到倒数第二个元素;内循环从第二个数组元素移动到最后一个元素,查找比当前外循环所指向的元素小的元素。每次内循环迭代后,数组中最小的值都会被赋值到合适的位置。

    //选择排序selectionSort() {for(var i = 0; i< this.data.length-1; i++) {for(var j = i+ 1;j < this.data.length; j++) {if(this.data[i] < this.data[j]) {var temp = this.data[i];this.data[i] = this.data[j];this.data[j] = temp}}}return this.data;}

3、插入排序:

插入排序类似于人类按数字或字母顺序对数据进行排序。例如,让班里的每个学生上交一张写有他的名字、学生证号以及个人简介的索引卡片。学生交上来的卡片是没有顺序的,但是我想让这些卡片按字母顺序排好,这样就可以很容易地与班级花名册进行对照了。

插入排序有两个循环。外循环将数组元素挨个移动,而内循环则对外循环中选中的元素及它后面的那个元素进行比较。如果外循环中选中的元素比内循环中选中的元素小,那么数组元素会向右移动,为内循环中的这个元素腾出位置,就像之前介绍的姓氏卡片一样。

    //插入排序insertionSort() {for(var i = 1; i< this.data.length; i++) {var temp = this.data[i];var j = i;while(j>0 && (this.data[j-1] >= temp)) {this.data[j] = this.data[j-1];--j}this.data[j] = temp;}return this.data;}insertionSort1() {for(var i = 1; i< this.data.length; i++) {for(var j = i; j>0; j--) {if(this.data[j-1] > this.data[j]) {var temp = this.data[j];this.data[j] = this.data[j-1];this.data[j-1] = temp;}  else {break;}}}return this.data}

以上这三种排序算法的复杂度非常相似,从理论上来说,它们的执行效率也应该差不多。要确定这三种算法的性能差异。经过测试:选择排序和插入排序要比冒泡排序快,插入排序是这三种算法中最快的。

4、快速排序

快速排序是处理大数据集最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据依次分解为包含较小元素和较大元素的不同子序列。该算法不断重复这个步骤直到所有数据都是有序的。
        这个算法首先要在列表中选择一个元素作为基准值(pivot)。数据排序围绕基准值进行,将列表中小于基准值的元素移到数组的底部,将大于基准值的元素移到数组的顶部

    //快速排序quickSort(arr) {if(arr.length == 0) {return [];}let left = [];let right = [];let point = arr[0];for(var i = 1; i< arr.length; i++) {if(arr[i] < point) {left.push(arr[i]);} else {right.push(arr[i]);}}return this.quickSort(left).concat(point, this.quickSort(right))} 

源码地址: https://github.com/GuoYuFu123/test-project/blob/master/arithmetic/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95.html

参考:《数据结构与算法JavaScript描述》

原创不易,自由转载,保留出处

javascript基本排序算法相关推荐

  1. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  2. javascript常用排序算法总结

    算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...

  3. JavaScript实现排序算法

    排序算法主要用在元素的数组排序,常见的排序算法有冒泡排序.选择排序.插入排序.希尔排序.快速排序.归并排序等.这些排序算法都可以用JavaScript实现.下面的排序算法都假设是从小到大进行排序,从大 ...

  4. JavaScript之排序算法

    本文主要介绍三种排序算法,分别是冒泡排序.选择排序和快速排序.为方便测试,本文会随机生成长度为10的数组,数组元素的值在[1,20]之间. 1.冒泡排序 核心思路:每一轮相邻两个数进行比较,选出一个最 ...

  5. JavaScript随机排序算法1

    1.对数组循环,每一项与随机的某一项位置调换 <ul id="listOne"></ul><div id="tempOne"> ...

  6. JavaScript实现排序算法(1)——冒泡排序

    冒泡排序 冒泡排序的核心思路,就是每一轮都把最大的数"冒"到数组顶部. 1 算法过程 (从小到大排序) 1. 每一轮排序,都从第一个数开始,比较相邻的数; 2. 如果第一个数比第二 ...

  7. javascript写各种排序算法

    在知乎上看到这个题目,就自己写了一下,在这里附上链接,里面有各种排序的动态图,非常形象直观,有助于新手对排序算法理解,链接:常见排序算法之JavaScript实现 首先各种排序算法都会用到的交换函数: ...

  8. JavaScript实现十种经典排序算法(js排序算法)

    冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法.冒泡排序算法的步骤描述如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一 ...

  9. JavaScript实现ShellSort希尔排序算法(附完整源码)

    JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...

  10. JavaScript实现SelectionSort选择排序算法(附完整源码)

    JavaScript实现SelectionSort选择排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 SelectionSort.js完整源代码 Compara ...

最新文章

  1. 无线ap软件_无线WLAN网络的优化技术
  2. QIIME 2教程. 16纵向和成对样本比较q2-longitudinal(2020.11)
  3. 在Django中,“子弹”是什么?
  4. Spring配置iBatis多个SqlMapConfig.xml
  5. Excel 2013:如何实现数据分列
  6. SQLite学习手册(数据表和视图)
  7. 等差数列划分Python解法
  8. 伪随机交织抑制突发噪声的MATLAB仿真(采用(2,1,3)卷积码)
  9. 登录页面(通过数据库查询密码是否正确)
  10. [Ynoi2012]D1T3
  11. arraylist线程安全吗_Java面试复习-IO和多线程
  12. 随想录(用python开发网站)
  13. 微服务调用组件Ribbon底层调用流程分析
  14. python打印当前时间
  15. 中大型企业的固定资产管理办法
  16. 【阿里Java技术进阶】官方钉群直播大全(持续更新)...
  17. “三权分立”模型之约束模型
  18. 微信点餐系统要服务器吗,微信点餐系统,钉钉点餐系统
  19. 【CSS】关于 z-index,你可能一直存在误区
  20. android 快速关闭键盘的方法,安卓永久关闭键盘灯的方法

热门文章

  1. HTML中       等6种空白空格的区别
  2. tpl_main_page.php
  3. 如何为Kalman Studio编写T4模板
  4. 简单的java图像裁减
  5. MyEclipse中的ant初识
  6. 关于员工技术及培训所想
  7. javaweb四种域对象的应用
  8. delphi 学习资源和移动开发
  9. Redis数据类型之字符串String
  10. PWM DAC vs. Standalone