数组的三种主要排序
时间:2019-04-20
本文章向大家介绍数组的三种主要排序,主要包括数组的三种主要排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍一下我自己,是一名在校培训的初级程序员,所以写的东西可能会有bug,还请大神多多指教
第一种是冒泡排序,简单的来形容就是两两比较,就好像是一组人比身高,下面让我们举个例子
假设有一个这样的数组 var arr = [10,9,8,7,6],来用冒泡排序来进行排序
第一轮 有5个数进行比较,两两比较,较大的数向后排列,最后得到一个最大的数 10
9 10 8 7 6
9 8 10 7 6
9 8 7 10 6
9 8 7 6 10
第二轮 去除第一轮得到的最大数10,剩余的数进行排列,得到一个9,再进行下一轮
8 9 7 6
8 7 9 6
8 7 6 9
第三轮
7 8 6
7 6 8
第四轮 7 6 1
6 7
比到第四轮时就可以得到我们想要的结果了--最小数6
【注】:通过以上演变我们得出一个结论也就是说比较的次数等于数组的长度减一; 每一次的比较内部需要两两比较的次数是 数组的长度-1-i
接下来是代码部分
var arr = [10,9,8,7,6];
var temp;
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]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
第二种是选择排序,类似于打擂台,你必须要跟每一个对手打架,赢得站在第一位,输了则要向后排
同样是上面的数组 var arr = [10,9,8,7,6],这次用选择排序来进行数组排序
[10,9,8,7,6];
和冒泡排序相反,我们每轮得到是一个最小的数
第一轮比较 7
9 10 8 7 6
8 10 9 7 6
7 10 9 8 6
6 10 9 8 7
第二轮 8
9 10 8 7
8 10 9 7
7 10 9 8
第三轮 9
9 10 8
8 10 9
第四轮 10
9 10
【注】:首先看比较次数的规律:数组的长度-1;每轮比较的规律:每次比较的位置都是当前数字的位置+1进行的比较
代码部分:
function Selection(arr){
var arr = [10,9,8,7,6];
var temp;
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
console.log(arr);
第三种是快速排序,它是三中排序中性能最好的
排序概念:将一个杂乱无章的数组进行一个快速排序,可以先从一个数组中取一个中间值,将一个数组一分为2,左边的数组跟中间值进行比较,小的放在左边,大的放在右边。比较完毕后再次取中间值,再次比较一次类推
思路
1、取的中间值,以及中间值的下标
2、创建一个left空数组,存放小于中间值的数据
3、创建一个right空数组,存放大于中间值的数据
4、递归的终止条件,如果数组的长度等于1的时候就返回数组
5、循环将数组一分为二
6、递归
代码部分
var arr = [10,66,3,64,2,98];
function fn(arr){
var index = arr.length%2 == 0?arr.length/2 : (arr.length+1)/2;
var mid = arr[index];
var left = [];
var right = [];
if(arr.length<2){
return arr;
}
for(var i=0;i<arr.length;i++){
if(index !=i && arr[i]<mid){
left.push(arr[i]);
}
if(index != i && arr[i]>=mid){
right.push(arr[i]);
}
}
return fn(left).concat(mid).concat(fn(right));
}
console.log(fn(arr));
- 《企鹅电竞weex实践—— iOS SDK的小九九》
- Linux操作系统DNS解析(nameserver)监控脚本
- 不给“爸爸”添麻烦 - iTOP iOS 动态库改造
- 移动SEO分享:php自动提交复合型Sitemap到百度搜索
- 《Android外部存储》
- Android JNI出坑指南
- 《iPhone X ARKit Face Tracking》
- 结合标签广告,定制一个QQ邮箱订阅
- SecureCRT全局发送相同命令,快速抓取服务器信息的方法
- [不定期更新]简单的shell脚本练习实例
- 超简单的MySQL主从复制配置步骤
- 解决Centos下vsftp无法上传文件的问题,附vsftp配置详解
- 为iFrame添加动态载入效果,提高用户体验
- 分享超炫的表白页面和爱的纪念日源码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法