四种js数组排序

``

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];
// 冒泡排序 通过双循环2 2 比较更换位置进行排序
function pop(arr) {
  const arr1 = arr;

  for (let i = 0; i < arr1.length; i++) {
    for (let j = 0; j < i; j++) {
      if (arr1[i] < arr1[j]) {
        const temp = arr1[j];
        arr[j] = arr1[i];
        arr[i] = temp;
      }
    }
  }
  return arr1;
}
// 快速排序
/**
 * 选确定数组长度
 * 取中间基数作为参考目标,设置左右2边空数组
 * 循环原数组和基数进行比较
 * 递归并合并左右2边数组
 * **/

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  const j = Math.floor(arr.length / 2);
  const infoNum = arr.splice(j, 1)[0];
  const left = [];
  const right = [];

  arr.map((item) => {
    if (item > infoNum) {
      right.push(item);
    } else {
      left.push(item);
    }
  });

  return quickSort(left).concat(infoNum, quickSort(right));
}
// 插入排序
/**
 * 设置一个变量记录状态,一个空数组负责存排序后的数据
 * 未排序和排序的数组进行循环比较,把旧数组中的每一项都和新数组进行比较,
 * 如果比其中某一项小就插入当前位置
 * 如果没有就插入最后的位置
 * */
function insertSort(arr) {
  const temp = [];

  for (let i = 0; i < arr.length; i++) {
    let flag = false;
    for (let j = 0; j < temp.length; j++) {
      if (arr[i] < temp[j]) {
        temp.splice(j, 0, arr[i]);
        flag = true;
        break;
      }
    }
    if (!flag) {
      temp.push(arr[i]);
    }
  }
  return temp;
}

// 选择排序
/**
 * 设置一个变量临时存储数据,一个变量记录最小数据位置
 * 循环 用第二个数据和第一个数据进行比较 如果小于等于这个元素就把位置记录
 * 变量 temp 赋值成当前循环的元素 当前元素赋值成最小元素 最小元素赋值成当前元素
 * 这样交换位置
*/
function selectSort(arr) {
  let temp;
  let minIndex;

  for (let i = 0; i < arr.length - 1; i++) {
    minIndex = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] <= arr[minIndex]) {
        minIndex = j;
      }
    }
    temp = arr[i]
    arr[i] = arr[minIndex]
    arr[minIndex] = temp
  }
  return arr
}

  

posted @ 2021-05-10 11:45  稚于最初灬  阅读(68)  评论(0编辑  收藏  举报