算法-排序

小 -> 大

一、冒泡排序

  • 依次比较相邻元素大小,若arr[i] > arr[i+1],则将两元素互换,最终将最大值放到最后
  • 去掉后面排好序的元素,将剩余元素执行上一步操作
  • 执行以上操作,直到剩余一个元素
function bubble(arr) {
  var length = arr.length;
  for(var i = 0; i < length; i++) {
    for(var j = 0; j < length - i - 1; j++) {
      if(arr[j] > arr[j+1]) {
        var temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
      }
    }
  }
  return arr;
}

二、选择排序

  • 从第一个元素开始遍历数组,找到最小值的索引,然后将最小值与第一个元素互换位置
  • 从第二个元素开始遍历数组,找到最小值的索引,然后将最小值与第二个元素互换位置
  • 从第三个元素开始遍历数组,找到最小值的索引,然后将最小值与第三个元素互换位置
    ...
  • 从倒数第二个元素开始遍历数组,找到最小值的索引,然后将最小值与倒数第二个元素互换位置
function select(arr) {
  var length = arr.length;
  var minIndex;
  for(var i = 0; i < length; i++) {
    minIndex = i;
    for(var j = i+1; j < length; j++) {
      if(arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if(minIndex !== i) {
      var min = arr[minIndex];
      arr[minIndex] = arr[i];
      arr[i] = min;
    }
  }
  return arr;
}

三、插入排序

  • 遍历数组,将当前元素与其前一个比较,若当前元素小,则继续向前比较,直到找到比当前元素更小的元素,然后将当前元素插入到比它小的元素之后,插入之前需要先将比当前元素大的元素的索引加一
function insert(arr) {
 var length = arr.length;
 for(var i = 1; i < length; i++) {
   var temp = arr[i];
   var j = i - 1;
   while(j >= 0 && arr[j] > temp) {
     arr[j+1] = arr[j];
     j--;
   }
   arr[j+1] = temp;
 }
 return arr;
}

你可能感兴趣的:(算法-排序)