Javascript 实现数组去重,快速排序

1.数组去重

只讨论两种,当然方法很多。

A: 最简单实现

思路:定义一个新的空数组 n,利用 indexOf 判断, 遍历数组 arr ,如果 arr[i] 已经存在于 n 数组内,不添加;否则就将 arr[i] 添加到数组 n 中, 最后返回数组 n
function unique(arr) {
		var n = [];
		for (var i = 0; i < arr.length; i ++) {
			if (n.indexOf(arr[i]) == -1){
				n.push(arr[i])
			}
		}
		return n;
	}

试着运行下:
console.log(unique([NaN,2,NaN, 3, 2, 4, 4, 5,6]));
得到的结果为: [NaN, 2, NaN, 3, 4, 5, 6]      对于NaN就会出现错误

B:利用Object对象不存在相同属性名特性进行去重

思路:新建一个空数组 n 存放结果。并新建一个空对象 json ,循环遍历数组,把数组的每个元素作为空对象 json的属性名(键),属性值(值)可以随便定。循环遍历的时候,检查 json[arr[i]] 属性是否已经存在,若存在, 表示此项 arr[i]为重复元素;如果不存在,就将 arr[i]这个值存入数组 n 中。最后返回 数组 n 
function unique1(arr) {
		var n = [];
		var json = {};
		for (var i = 0; i < arr.length; i ++) {
			if (!json[arr[i]]) {
				n.push(arr[i]);
				json[arr[i]] = 2;
			}
		}
		return n;
	}

试着运行下:
console.log(unique1([NaN,2,NaN, 3, 2, 4, 4, 5,6]));

得到结果为: [NaN, 2, 3, 4, 5, 6]

2.快速排序


使用递归对数组进行快速排序:

思路:1.选一个基准项,midNum,
   2.定义两个空数组来临时存放结果: left = [ ], right =  [ ];
   3.遍历数组中的元素,每个元素与 基准项 midNum 对比,小于基准值的 元素放入数组 left 中,大于基准项的放入数组 right 中;
   4.然后使用递归不断的重复上面过程,直到最后得出结果。
function quickSort(arr) {
		if (arr.length < 2) {
			return arr
		}
		var midIndex = Math.floor(arr.length / 2);
		var midNum = arr.splice(midIndex, 1);
		var left = [];
		var right = [];
		for (var i = 0; i < arr.length; i++) {
			if (arr[i] < midNum) {
				left.push(arr[i])
			} else {
				right.push(arr[i])
			}
		}

		return quickSort(left).concat([midNum], quickSort(right))
	}

尝试运行:
var arr = [2, 4, 3, 4, 6, 3, 2, 5, 6, 2, 3, 6, 5, 4]
	alert(quickSort(arr))

得到结果为:
 

猜你喜欢

转载自blog.csdn.net/lihchweb/article/details/72902731
今日推荐