三种排序

175 阅读1分钟

排序

一. 冒泡排序

元素和相邻最近的元素比较

   1. 外层循环-1;

   2. 内层循环-1-i;

   3. 内循环相邻比大小;

   4. 邻里交换位置

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

二 . 选择排序

和每一个元素和其他元素比较

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

三 . 快速排序

  1. 找到中间的下标

  2. 通过中间的下标,找到中间数

  3. 定义左边的数组

  4. 左边 + 中间数 + 右边数,这里使用的是 函数的递归

  5. 设置一个变量 接受函数

    var arr = [2, 4, 6, 3, 5];
    function fnt(arr) {
    if (arr.length <= 1) {
    return arr; //如果数组小于等于1, 就不动数组
    }
    //1. 找到中间的下标
    var mIndex = Math.floor(arr.length / 2);
    //2. 通过中间的下标,找到中间数
    var mVal = arr.splice(mIndex, 1)[0];
    var leftArr = []; // 定义左边的空数组
    var rightArr = []; // 定义右边的空数组
    for (var i = 0; i < arr.length; i++) {
    if (arr[i] > mVal) {
    rightArr.push(arr[i]);
    } else {
    leftArr.push(arr[i]);
    }
    }
    // 左边 + 中间数 + 右边数,这里使用的是 函数的递归
    return fnt(leftArr).concat(mVal, fnt(rightArr));
    }
    var res = fnt(arr); //设置一个变量 接受函数
    console.log(res);

四 . 去重

imdexOf, 如果找到啦就返回下标,找不到就返回-1;

function fn1(list) {            
    var tempArr = []; //一个空数组            
    for (var i =0; i <list.length; i++) {                
        if (tempArr.indexOf(list[i]) == -1) {                    
           tempArr.push(list[i]);                
        }            
    }            
    return tempArr;         
}