js数组排序的几种方法

js数组排序的几种方法1、冒泡排序以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮,再根据外部的循环依次再把次大一点的元素放到数组的末尾,从而实现数组的逐步排序。代码如下://冒泡排序vararr=[52,3,8,57,75,2,1];for(…

大家好,又见面了,我是你们的朋友全栈君。

1、冒泡排序

以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮,再根据外部的循环依次再把次大一点的元素放到数组的末尾,从而实现数组的逐步排序。代码如下:

// 冒泡排序
var arr = [52,3,8,57,75,2,1];
for (var i = 0; i<arr.length; i++) {
	for (var j =0;j<arr.length-i; j++) {
		if(arr[j]>arr[j+1]){
			var temp = arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp; 
		}
	}
}
console.log(arr); //[1, 2, 3, 8, 52, 57, 75]

这里面通过一个变量temp实现相邻两个元素的位置替换,从而循环一轮使得最大的元素放到数组的末尾。

2、快速排序

快速排序是运用递归进行循环调用函数从而使得数组进行排序,代码如下:

// 快速排序
function quickSort(arr){
  if(arr.length <= 1) return arr;
  var Temp = Math.floor(arr.length/2);
  var left = [],right = [];
  var num = arr.splice(Temp,1)[0];
  for(var i = 0;i < arr.length;i ++){
    if(arr[i] < num){
      left.push(arr[i]);
    }
    else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat(num,quickSort(right));
}
var arr=[5,2,1,10,8,12,40,26,30];
console.log(quickSort(arr)); //[1, 2, 5, 8, 10, 12, 26, 30, 40]

其原理是首先创建一个递归函数,也就是函数的返回值还是函数本身,直到符合条件之后递归函数停止运行,像这个函数就是当时arr数组的长度小于等于1的时候该递归函数停止运行。基本原理就是先找到数组中的中间那个元素的索引,如果数组长度是双数,那么就默认向上取值,也就是默认取数组长度/2+1位索引,在根据索引去的数组中间的值,然后创建两个空数组,用来放置比该元素小的值和比该元素大的值,在循环数组进行判断,如果数组的元素小于该中间位置元素的值,就放到左边数组,反之放到右边的数组,在函数中返回值设置为左边数组+中间的值+右边数组的拼接新数组,然后再根据递归对左边和右边的数组分别进行刚才的操作,直到数组的长度小于或者等于1,这时候停止,这时候调用函数之后,传入一个数组,就会自动返回数组排序之后的新数组,这就是快速排序的原理。

3、sort排序

// sort排序
var arr=[8,12,312,4,5];
function sortArray(n1,n2){
    return n1-n2;
}
arr.sort(sortArray); 
console.log(arr) //[4, 5, 8, 12, 312]

sort默认排序是按照字符来排序的,也就是ascii字母排序的,如果想要改变默认的排序方式,就要给他加一个自定义排序规则

function sortArray(n1,n2){
    return n1-n2;
}

这个函数的意思是:若 n1小于 n2,即 n1-n2  小于零,则返回一个小于零的值,数组将按照升序排列。

function sortArray(n1,n2){
    return n2-n1;
}

这个函数的意思是:若 n1 大于 n2, 即 n1 – n2 大于零,则返回一个大于零的值,数组将按照降序排列。

4、选择排序

选择排序原理就是选择出数组中最大或者是最小的数放到最前面,然后在一次循环,选择次一级最大或者最小的数,从而得到想要的排序数组。

// 选择排序
var arr = [14, 82, 7, 1, 9, 0];
for(var i = 0; i < arr.length - 1; i++){
    for(var j = i + 1; j < arr.length; j++){
        if(arr[i] > arr[j]){
            var tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }
 }
console.log(arr);//[0, 1, 7, 9, 14, 82]

选择排序也是运用中间变量的方法进行了数组元素位置的变换,从而使得最大或者最小的的元素一次从前向后排列。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130630.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ModelAndView 详解

    ModelAndView 详解当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。当你只有一个模型

    2022年7月18日
    15
  • SM2246EN+闪迪15131

    SM2246EN+闪迪15131由于正常的SM2246EN开卡工具不会有闪迪15131的数据,所以我们要先进行一点骚操作A773=SanDisk,1Tbit(16K),15131SanDisk,1Tbit(16K),15131=45,3C,A5,93,7E,D0,2,08,10,0,4036,4096,2,9,5,256,4,16,1280,3,180,8F,27,30,2,5F,21,29,1,2,1,52,51,0,A2,0,1,0,0,C0,99,99,99,99,12,26,99,99,77,77,77,77,0,0,..

    2022年6月11日
    69
  • Idea激活码永久有效Idea2020.2.4激活码教程-持续更新,一步到位[通俗易懂]

    Idea激活码永久有效Idea2020.2.4激活码教程-持续更新,一步到位[通俗易懂]Idea激活码永久有效2020.2.4激活码教程-Windows版永久激活-持续更新,Idea激活码2020.2.4成功激活

    2022年6月17日
    114
  • 银行家算法详解(C语言)

    银行家算法详解(C语言)概述银行家算法是荷兰学者Dijkstra为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁核心思想:在进程提出资源申请时,先预判此分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。过程演示图解假定有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7。在T0时刻的资源分配情况如下T0时刻的安全性P1发出请求向量Request1(1,

    2022年7月22日
    17
  • 表格图片加载不出来,破图,加载失败怎么办_ie网页表格显示不出来

    表格图片加载不出来,破图,加载失败怎么办_ie网页表格显示不出来表格图片加载不出来,破图,加载失败el-upload组件将图片上传至服务器<templateslot-scope=”scope”slot=”wjmcForm”><el-upload:headers=”headers”:show-file-list=”false”…

    2025年8月6日
    3
  • lede旁路由作用,【旁路由】LEDE/OpenWrt作为旁路由辅助网关(目前最优解)OpenWrt网关旁路由设置…

    lede旁路由作用,【旁路由】LEDE/OpenWrt作为旁路由辅助网关(目前最优解)OpenWrt网关旁路由设置…主路由一般安装爱快或者ROS,主要负责PPPOE拨号、实现多拨、流控、宽带叠加等功能,辅路由一般安装OpenWrt用于实现去广告、网易云音乐听歌等功能。旁路由一般选择单网口的设备安装OpenWrt,也可以使用群晖主机虚拟一个OpenWrt软路由。主路由:192.168.10.1旁路由:192.168.10.200第一步:设置OpenWrt旁路由1、登录OpenWrt后台,关闭DHCP,DHCP由主…

    2022年6月8日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号