算法排序

440 阅读2分钟

学飞了一周后,自己好吸收的 有冒泡,选择,插入和快排就迷迷糊糊的

冒泡

  1. 自己简单理解,每一次把最大的数弄到最后
  2. 边界值没冒一次就减少一个数的比较 所以就有了一下的代码
     function srot(arr) {
        for(let i = 0; i < arr.length - 1; i++) {
            // 边界减少
            for(let j = 0; j < arr.length - i - 1; j++) {
                  // 如果当前值比后边的值大则交换位置
                  if(arr[j] > arr[j+1]){
                      let temp = arr[j+1];
                      arr[j+1] = arr[j];
                      arr[j] = temp;
                  }
            }
        }
        
        return arr;
     }

选择(简单排序)

  1. 线找到最小的或者最大的 起初这样写的
function deleNumber(val, arr){
    for(let i = 0; i < arr.length ; i++){
        if(arr[i] == val){
            delete arr[i];
        }
    }
    return arr.filter((item) => item);
}


function selectionSort2(arr){
    let t = [];
    while(arr.length){
        let min = Math.min.apply('',arr);
        arr = deleNumber(min,arr);
        t.push(min);
    }
    return t;
}

后来学习后就可以不用api实现了

   function sort(arr){
       let minIndex; // 找到最小值
       // 结束条件为啥是arr.length  因为 数组是从下标为0开始,所以实际长度为长度-1;
       for(let i = 0; i < arr.length - 1; i++) {
            minIndex  = i;
            // 第一个元素给了minIndex 所以 此处 为 i 的下一个元素 
            for(let j = i + 1; j < arr.length - 1; j++ ) {

                  if(arr[j] < arr[minIndex]){
                    // 记录最小的下标
                      minIndex = j;
                  }
            }


            // 这里 我老容易把 j 放过来。编译器报错,才意识到j在内循环的时候已经完成了它记录最小下表的使命了
            let temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
        return arr;
    }


插入

  1. 从头到尾一次扫描插入到合适的位置 已经开始迷糊了

function insertionSort(arr){
  let preIndex;
  let current;
  for(let i = 1 ; i < arr.length; i++){
    preIndex = i - 1; // 记录游标位置
    current = arr[i]; // 记录当前比较的值
    // 此处条件有些难
    while(preIndex >= 0 && arr[preIndex] > current){
      // 使用游标交换
      arr[preIndex+1] = arr[preIndex];
      // 直到比较完
      preIndex--;
    }
    arr[preIndex+1] = current;
  }

  return arr;

快排不行搞不定就是背也老是错东错西的。

有待日后提高