排序 冒泡排序选择排序 数组去重

本文深入探讨了排序算法的基本概念,包括JavaScript中的sort()方法使用,冒泡排序和选择排序的实现原理及步骤。通过实例演示了如何对数组进行升序和降序排序,详细解释了每种算法的特点和操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

000本篇主要写的排序算法

sort()排序

sort()
这个当然是最简单的数组排序方法,但是字符串排序,
如果想数字排序可以这样写:

从小到大

var arr = [50, 30, 40, 10, 20];
arr.sort(function(value1, value2){
	return value1 > value2;
})
alert();//10,20,30,40,50

从大到小

var arr = [50, 30, 40, 10, 20];
arr.sort(function(value1, value2){
	return value1 < value2;
})
alert();//50,40,30,20,10

冒泡排序

规则:前后两个数,两两进行比较,如果符合交换条件,则交换位置。
特点:每一轮比较,都会有一个数,放在正确的位置。

				第一轮:五次
					9, 8, 7, 6, 5, 4
					8, 9, 7, 6, 5, 4
					8, 7, 9, 6, 5, 4
					8, 7, 6, 9, 5, 4
					8, 7, 6, 5, 9, 4
					8, 7, 6, 5, 4, 9
				第二轮:四次
					8, 7, 6, 5, 4
					7, 8, 6, 5, 4
					7, 6, 8, 5, 4
					7, 6, 5, 8, 4
					7, 6, 5, 4, 8
				第三轮:三次
					7, 6, 5, 4
					6, 7, 5, 4
					6, 5, 7, 4
					6, 5, 4, 7
				第四轮:二次
					6, 5, 4
					5, 6, 4
					5, 4, 6
				第五轮:一次
					5, 4
					4, 5
					
			比较轮数 = 数组的长度 - 1
			每一轮比较的次数 = 数组的长度 - 比较的轮次
var arr = [9, 8, 7, 6, 5, 4];
for(var i = 0; i < arr.length - 1; i++){
	for(var j = 0; j < arr.length - i - 1; j++){
		if(arr[j] > arr[j + 1]){
			var tmp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = tmp;
		}
	}
}
alert(arr);//4,5,6,7,8,9

选择排序

规律:每一次找出一个位置,这个位置上的数字和后面所有的数字进行比较,如果符合交换条件就交换位置。
特点:每一轮比较都会找出一个最小的数,放在正确的位置。

			第一轮:
					9, 8, 7, 6, 5, 4
					8, 9, 7, 6, 5, 4
					7, 9, 8, 6, 5, 4
					6, 9, 8, 7, 5, 4
					5, 9, 8, 7, 6, 4
					4, 9, 8, 7, 6, 5	
			第二轮:
				   9, 8, 7, 6, 5
				   8, 9, 7, 6, 5
				   7, 9, 8, 6, 5
				   6, 9, 8, 7, 5
				   5, 9, 8, 7, 6
			第三轮:
				      9, 8, 7, 6
				      8, 9, 7, 6
				      7, 9, 8, 6
				      6, 9, 8, 7
			第四轮:
						 9, 8, 7
						 8, 9, 7
						 7, 9, 8
			第五轮:
						    9, 8
						    8, 9

			比较的轮数 = 数组的长度 - 1;
			每一轮比较的次数 = 数组的长度 - 轮数
			var arr = [9, 8, 7, 6, 5, 4];
			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;
					}
				}
			}
			alert(arr);

练习题

1、随机给出一个五位以内的数,然后输出该数共有多少位,每位分别是什么?

			function countOfNum(num){
				var arr = [];
				while(num){
					arr.push(num % 10);
					num = parseInt(num / 10);
				}
				arr.reverse();
				alert("一共有" + arr.length + "位");//一共有5位
				alert("每一位分别是" + arr);//每一位分别是12345
			}
			countOfNum(12345);

2、编写函数map(arr) 把数组中的每一位数字都增加30%

function map(arr){
	for(var i = 0; i < arr.length; i++){
		arr[i] *= 1.3;
	}
}
var arr1 = [10, 20, 30, 40];
map(arr1);
alert(arr1);//13,26,39,52

3.编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型。

function has(arr, item){
	var isYes = false; //假设没有
	for(var i in arr){
		if(arr[i] === item){
			isYes = true;
			break;
		}
	}
	return isYes;
}
alert(has(arr1, 30));

4.编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组(拓展)

正序删除

var arr = [10, 20, 20, 30, 40, 30, 20, 10];
function norepeat(arr){
	for(var i = 0; i < arr.length - 1; i++){
		for(var j = i + 1; j < arr.length; j++){
			if(arr[i] === arr[j]){
				arr.splice(j, 1);
				j--; //在重新判断一次这个位置的元素
			}
		}
	}
}	
norepeat(arr);
alert(arr);//10,20,30,40

倒序删除

var arr = [10, 20, 20, 30, 40, 30, 20, 10];
function norepeat(arr){
	for(var i = arr.length - 1; i > 0; i--){
		for(var j = i - 1; j >= 0; j--){
			if(arr[i] === arr[j]){
				arr.splice(j, 1);
			}
		}
	}
}	
norepeat(arr);
alert(arr);//40,30,20,10

快捷的数组去重的方法 低版本不兼容

这个超快了啦,但B事一堆IE8啦(台腔~笑)

var arr = [10, 20, 20, 30, 40, 30, 20, 10];
arr = [...new Set(arr)];
alert(arr);//10,20,30,40
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值