文章目录

  • 1.Js中的sort()方法
  • 2.选择排序
  • 3.冒泡排序
  • 4.插入排序
  • 5.快速排序(依托递归函数)

1.Js中的sort()方法

基本思想:根据提供的排序规则,对数组元素进行排序。使用数字排序,必须通过一个函数作为参数来调用。

var arr = [123,203,23,13,34,65,65,45,89,13,1];
function func(a,b){return a-b;
}
console.log(arr.sort(func)); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

2.选择排序

基本思想:首先在未排序数组中找到最小(大)元素,存放在数组的起始位置。
再从剩余数组元素中继续寻找最小(大)元素,返回放在已排序数组的末尾重复第二步,直到所有元素都排序完成
动画演示:

var arr = [123,203,23,13,34,65,65,45,89,13,1];
for(var i=0;i<arr.length;i++){for(var j=i+1;j<arr.length;j++){//如果第一个比第二个大,就交换他们两个位置if(arr[i]>arr[j]){var temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

3.冒泡排序

基本思想:一次比较两个相邻的数,如果不符合规则互换位置,一次比较就能够将最大或最小的值放在数组最后一位继续对除【最后一位】之外的所有元素重复上述过程
动画演示:

var arr = [123,203,23,13,34,65,65,45,89,13,1];
for(var i=0; i<arr.length-1; i++){//每一轮比较要比多少次for(var j=0; j<arr.length-1-i; j++){//如果第一个比第二个大,就交换他们两个位置if(arr[j]>arr[j+1]){var temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

4.插入排序

基本思想:将数组第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。
动画演示:

var arr = [123,203,23,13,34,65,65,45,89,13,1];
var preIndex, current;
for(var i=1;i<arr.length;i++){preIndex = i-1;current = arr[i];while(preIndex>=0 && arr[preIndex]>current) {arr[preIndex+1] = arr[preIndex];preIndex--;}arr[preIndex+1] = current;
}
console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

5.快速排序(依托递归函数)

基本思想:在已知数据集合中随便去一个基准(pivot)将其余数据以基准为中心,大于分放右边,小于的放左边将左右两个子集重复以上两个步骤
动画演示:

var arr = [123,203,23,13,34,65,65,45,89,13,1];
//创建快速排序函数
function quickSort(tempArr){//递归终止条件if(tempArr.length<=1){return tempArr;};//取基准var pivotIndex = Math.floor(tempArr.length/2);var pivot = tempArr.splice(pivotIndex,1);//分左右var leftArr = [];var rightArr = [];for(var i=0;i<tempArr.length;i++){if(tempArr[i]>pivot){rightArr.push(tempArr[i]);}else{leftArr.push(tempArr[i]);};};return quickSort(leftArr).concat(pivot,quickSort(rightArr));
};
console.log(quickSort(arr)); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]

数组排序的五常见方式相关推荐

  1. js中数组排序的五种方式

    下面主要介绍了数组排序的五种方式--sort()方法.选择排序.冒泡排序.插入排序和快速排序, 刚兴趣的朋友,可以往下看哦. 1.js中的sort()方法 基本思想:根据提供的排序规则,对数组元素进行 ...

  2. java clone方法_干货满满:Java中创建对象的五种方式详解

    通常来说,对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为. 作为Java开发者,我们通常都是使用依赖管理系统,比如Spring去创建Java对象,但使用管理系统创建对象并不是唯一 ...

  3. 数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?

    前言 着急用的话,选择前两个就行了,后面的看看就好. 开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路. 一.希尔排序(性能最好) 如果要从大到小排列,则 while(arr[n] & ...

  4. 大数据正在改变客户服务的五种方式

    大数据正在改变客户服务的五种方式 任何组织的命脉,无论是否面向服务,都是需要为客户提供良好的服务.组织如何与其客户进行互动,会影响他们如何看待组织,这会影响潜在客户,除了组织最忠实的客户之外. 客户服 ...

  5. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别、不可重复读与幻读的区别

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spr ...

  6. java 给对象创建实例_Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  7. 六种黑客入侵手机的常见方式

    六种黑客入侵手机的常见方式 在移动网络科技高速发展的今天,我们每个人的手机都有可能成为黑客攻击的对象,下面为大家介绍6种黑客入侵手机的常见方式,希望能够帮助大家避免手机被不对象攻击. 1.网络钓鱼攻击 ...

  8. OC循环渐进:文件管理--计算文件大小的五种方式

    在文件管理中,计算文件的大小是要经常用到的操作!其核心就是利用NSData中的length方法来计算字节长度. 以下介绍文件中计算大小的五种常见方式: 创建文件的代码如下: NSString *doc ...

  9. BlackBerry上连接HTTP或Socket的五种方式

    在blackberry的开发中,网络相关的设置有时候比较令人困惑,下面是一篇关于网络设置编程的文章 BlackBerry上连接HTTP或Socket的五种方式 BlackBerry 的API提供了五种 ...

最新文章

  1. 逐渐增高_健身能不能增高?真相原来是这样
  2. 智能市场变革,独辟蹊径的机器人营销
  3. oracle数据库改名步骤,oracle 11g2 数据库改名详细解释 oracle数据库改名详解 oracle database 改名详解 dbname...
  4. STM32f4 ARM Bootloader
  5. uboot的一般性介绍
  6. 关于android输入框被键盘遮挡的问题
  7. Git 拉取开发环境代码,合并到自己分支,提交自己分支
  8. C++随机数生成器(default_random_engine)
  9. php里无法找到该网页,thinkphp搭建网站后端,入口文件找不到(无法加载)
  10. 听说看了这篇文章就彻底搞懂了什么是OPC(上)
  11. 【Dlib人脸识别】1. Dlib人脸检测的基本原理
  12. mysql语句按时间顺序排序_SQL语句怎么写?先按时间排序,再按姓名排序?
  13. 【Hive】建表时的存储格式
  14. 微信小程序分享到朋友圈,在朋友圈打开报错 error code -501023
  15. 解决ERROR 1129 (HY000): Host ‘xxx‘ is blocked because of many
  16. delphi php 移动开发工具,盒子 - 完整版DELPHI XE10.1移动开发框架  绝对可以使用...
  17. Educational Codeforces Round 123 (Rated for Div. 2) 简训
  18. 手写字符识别入门学习记录(1)
  19. Uber将颠覆B.A.T?
  20. 制作网页游戏的页面。(开始网页,登录账号网页和进入网页)

热门文章

  1. 第77部分- Linux x86 64位汇编 优化编译器代码
  2. Linux中将普通用户更改为超级用户的命令
  3. 微软小娜app案例分析
  4. 罗永浩2020跨年演讲音频视频下载
  5. 【MySQL数据库】MySQL聚合函数、时间函数、日期函数、窗口函数等函数的使用
  6. 南京理工大学紫金学院 Javaweb跨平台开发实践
  7. 3ds max学习笔记(九)-- 实例操作(路径阵列)
  8. JMeter while控制器与计数器的使用
  9. es elasticsearch整合kibana,HanLP分词器
  10. 超简单的JS模仿QQ弹窗效果