学习打卡 JavaScript-数组排序方式

       今天重新系统学习JavaScript时,温习了JS的数组排序方式,以此在这里做个整理:

(一)系统排序方法

  1. reverse() 
    

      【功能】逆向排序
      【格式】数组.reverse();

	var arr = [10,20,30,40];
	arr.reverse();
	console.log(arr); //(4) [40, 30, 20, 10]
  1. sort()
    

      【功能】升序排序
      【格式】 数组.sort();

	var arr2=[5,4,3,2,1];
	arr2.sort();
	console.log(arr2);//(5) [1, 2, 3, 4, 5]

      【注】 sort()默认按照字符串进行排序,见下例:

	var arr22=[10,1,5,15];
	arr22.sort();
	console.log(arr22);//(5) [1,10,15,5]

      而JS中,字符串排序是逐位按照ASCII码大小进行排序,例子中‘5’的ASCII码值最大,所以排到最后。

(二) 冒泡排序
       冒泡排序是每个编程初学者都会立马学习到的排序方式,在此再次进行整理:
      【原理】前后两个数两两进行比较,如果符合交换条件,则交换位置。直到所有数据排序完成.
例:对数组 【9,8,7,6,4,3】进行升序排序。

var arr3 = [9,8,7,6,4,3];

       因为是升序排序,整个排序的核心思路就是通过两两比较,每一轮将整个数组中的最大数往后放,通过 (arr.length - 1) 轮即排序完成。(n个数,需要n-1轮,因为排序完前n-1个数,最后一个数自己目前所处的位置就是正确的位置)
       而每经过一轮排序,需要进行两两比较的次数在不断减1(因为前几轮已经把某个极端大小的元素放到它所处的正确位置上了),即 除去已经排序完成的元素,该轮需要比较的次数为(数组个数 - 轮次数)

本例排序过程如下:

第一轮:
	9,8,7,6,4,3
	8,9,7,6,4,3
	8,7,9,6,4,3
	8,7,6,9,4,3
	8,7,6,4,9,3
	8,7,6,4,3,9  
	【注】:每一轮取出了一个最大的数放在正确的位置
	
第二轮:
	8,7,6,4,3
	7,8,6,4,3
	7,6,8,4,3
	7,6,4,8,3
	7,6,4,3,8
	
第三轮:
	7,6,4,3
	6,7,4,3
	6,4,7,3
	6,4,3,7
	
第四轮:
	6,4,3
	4,6,3
	4,3,6

第五轮
	4,3
	3,4

见代码:

	for(var i = 1;i<arr3.length;i++){//需要比较的轮次 
		//每一轮比较的次数
		for(var j = 0;j<arr3.length-i;j++){
			//判断前后两个数是否符合交换条件
			if(arr3[j]<arr3[j + 1]){
				var tmp = arr3[j + 1];
				arr3[j + 1] = arr3[j];
				arr3[j] = tmp;	
			}	
		}
	}
	
	console.log(arr3);//3,4,6,7,8,9

       在理解冒泡排序运行原理的基础上去写算法肯定是最清楚最清晰的,如果实在难以理解,也可以记住以下公式,用于冒泡排序的使用:
                  外层循环次数 = 被排序数组个数 - 1 ;
                  内层循环次数 = 被排序数组个数 - 外层循环次数;


(三) 选择排序
      【原理】通过比较选出最小的数放在第一个位置上,然后在其余的数中选择次小数放在第二个位置,以此类推,直到所有的数成为有序序列。
       选择排序相较于冒泡排序就好理解的多:通过不断的“以一敌多”的方式来完成数组的排序。所以,选择排序在很多大佬口中也被称作“擂台排序”或者“打擂台

见代码:

	var arr4 = [9,8,7,6,4,3];

	for(var i = 0;i<arr4.length-1;i++){
		for(var j = i+1;j<arr4.length;j++){
			if(arr4[i]>arr4[j]){
				var tmp = arr4[i];
				arr4[i] = arr4[j];
				arr4[j] = tmp;
			}	
		}	
	}
	
	console.log(arr4);//3,4,5,6,7,8,9

       以上便是JS常用的排序算法,

      【注】一般情况下,我们尽可能地要自己去编写排序算法,系统提供给我们的排序算法局限性大,容易出Bug,用的比较少。

猜你喜欢

转载自blog.csdn.net/weixin_44990584/article/details/106196145
今日推荐