数组排序的五常见方式
文章目录
- 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]
数组排序的五常见方式相关推荐
- js中数组排序的五种方式
下面主要介绍了数组排序的五种方式--sort()方法.选择排序.冒泡排序.插入排序和快速排序, 刚兴趣的朋友,可以往下看哦. 1.js中的sort()方法 基本思想:根据提供的排序规则,对数组元素进行 ...
- java clone方法_干货满满:Java中创建对象的五种方式详解
通常来说,对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为. 作为Java开发者,我们通常都是使用依赖管理系统,比如Spring去创建Java对象,但使用管理系统创建对象并不是唯一 ...
- 数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?
前言 着急用的话,选择前两个就行了,后面的看看就好. 开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路. 一.希尔排序(性能最好) 如果要从大到小排列,则 while(arr[n] & ...
- 大数据正在改变客户服务的五种方式
大数据正在改变客户服务的五种方式 任何组织的命脉,无论是否面向服务,都是需要为客户提供良好的服务.组织如何与其客户进行互动,会影响他们如何看待组织,这会影响潜在客户,除了组织最忠实的客户之外. 客户服 ...
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别、不可重复读与幻读的区别
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spr ...
- java 给对象创建实例_Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- 六种黑客入侵手机的常见方式
六种黑客入侵手机的常见方式 在移动网络科技高速发展的今天,我们每个人的手机都有可能成为黑客攻击的对象,下面为大家介绍6种黑客入侵手机的常见方式,希望能够帮助大家避免手机被不对象攻击. 1.网络钓鱼攻击 ...
- OC循环渐进:文件管理--计算文件大小的五种方式
在文件管理中,计算文件的大小是要经常用到的操作!其核心就是利用NSData中的length方法来计算字节长度. 以下介绍文件中计算大小的五种常见方式: 创建文件的代码如下: NSString *doc ...
- BlackBerry上连接HTTP或Socket的五种方式
在blackberry的开发中,网络相关的设置有时候比较令人困惑,下面是一篇关于网络设置编程的文章 BlackBerry上连接HTTP或Socket的五种方式 BlackBerry 的API提供了五种 ...
最新文章
- 逐渐增高_健身能不能增高?真相原来是这样
- 智能市场变革,独辟蹊径的机器人营销
- oracle数据库改名步骤,oracle 11g2 数据库改名详细解释 oracle数据库改名详解 oracle database 改名详解 dbname...
- STM32f4 ARM Bootloader
- uboot的一般性介绍
- 关于android输入框被键盘遮挡的问题
- Git 拉取开发环境代码,合并到自己分支,提交自己分支
- C++随机数生成器(default_random_engine)
- php里无法找到该网页,thinkphp搭建网站后端,入口文件找不到(无法加载)
- 听说看了这篇文章就彻底搞懂了什么是OPC(上)
- 【Dlib人脸识别】1. Dlib人脸检测的基本原理
- mysql语句按时间顺序排序_SQL语句怎么写?先按时间排序,再按姓名排序?
- 【Hive】建表时的存储格式
- 微信小程序分享到朋友圈,在朋友圈打开报错 error code -501023
- 解决ERROR 1129 (HY000): Host ‘xxx‘ is blocked because of many
- delphi php 移动开发工具,盒子 - 完整版DELPHI XE10.1移动开发框架 绝对可以使用...
- Educational Codeforces Round 123 (Rated for Div. 2) 简训
- 手写字符识别入门学习记录(1)
- Uber将颠覆B.A.T?
- 制作网页游戏的页面。(开始网页,登录账号网页和进入网页)