前端开发JS基础快速排序和数组去重

智联招聘web前端开发
西安前端开发招聘
兰州前端开发招聘

<一>、快速排序 方法介绍:
javascript 代码

/*
*(1)在数据集之中,选择一个元素作为”基准”(pivot)。
*(2)所有小于”基准”的元素,都放置于”基准”的”小值区域”(左边);所有大于”基准”的元素,都被置于”基准”的”大值区域”(右边)。
*(3)对以”基准”为分割线的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
*/
quickSort = function(arr) {
    //返回(如果当前数组不再需要排序时)
    if (arr.length <= 1) return arr
    //声明两个数组分别用来防止”小值”和”大值”
    var less = []
    var greater = []
    //选取被排序数组中的任一元素作为”基准”(这里我们就选取数组中间的元素)
    var pivotIndex = Math.floor(arr.length / 2)
    var pivot = arr.splice(pivotIndex, 1)[0]
    //遍历数组,进行区分操作
    for (var i = 0, len = arr.length; i < len; i++) {
        if (arr[i] < pivot) {
            less.push(arr[i])
        } else {
            greater.push(arr[i])
        }
    }
    //最后使用递归不断重复这个过程,直到获得排序后的数组
    return quickSort(less).concat([pivot], quickSort(greater))
}
//实例
var arr = [89, 28, 743, 18, 93, 58, 84, 65]
console.log(‘数组元素的原始排列:’ + arr.join(‘,’))
console.log(‘排序后,数组元素的排列:’ + quickSort(arr).join(‘,’))

注:资料参考链接

<二>、数组去重 方法介绍:
1.利用indexOf
javascript 代码

function unique(arr) {
    var ret = []
    for (var i = 0, len = arr.length; i < len; i++) {
        var item = arr[i]
        if (ret.indexOf(item) === -1) {
            ret.push(item)
        }
    }
    return ret
}
var arr = [1, 3, 5, ‘1’, 5, 9]
var r = unique(arr)
console.log(‘排序后:’ + r)

但问题是在老版本的IE浏览器中,不存在数组的indexOf方法~

2.两层循环筛选法
javascript 代码

Array.prototype.unique = function() {
    var ret = [this[0]]
    for (var i = 1; i < this.length; i++) {
        var repeat = false
        for (var j = 0; j < ret.length; j++) {
            if (this[i] == ret[j]) {
                repeat = true
                break
            }
        }
        if (!repeat) {
            ret.push(this[i])
        }
    }
    return ret
}

3.利用hash对象来代替indexOf
javascript 代码

function unique(arr) {
    var ret = []
    var hash = {}
    for (var i = 0; i < arr.length; i++) {
        var item = arr[i]
        var key = typeof item + item
        if (hash[key] !== 1) {
            ret.push(item)
            hash[key] = 1
        }
    }
    return ret
}
var arr = [1, 3, ‘h’, 1, ‘h’]
var r = unique(arr)
console.log(r)

注:(在JavaScript里,对象的键值只能是字符串,因此这里用到了var key = typeof(item) + item;来区分 数字1 和字符串“1”等之类的情况)。
当然这些都不是万能的代码,具体看执行环境

广州前端开发招聘
大连前端开发招聘
思睿地产招聘前端开发
赞(0)
前端开发者 » 前端开发JS基础快速排序和数组去重
64K

评论 抢沙发

评论前必须登录!