数组排序算法

122 阅读1分钟
// 冒泡排序
function bubble(arr) {
  for(var i=0; i<arr.length; i++) {
    for(var j=0; j<i; j++) {
      if (arr[j]>arr[j+1]) {
        var tmp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = tmp;
      }
    }
  }
  return arr;
}

// 插入算法
function insertion(arr) {
  for (var i = 1; i < arr.length; i++) {
    for (var j = i - 1; j > 0; j--) {
      if(arr[j]>arr[j+1]) {
        var tmp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = tmp
      }
    }
  }
  return arr;
}

// 选择排序
function selection(arr) {
  for(var i=0; i<arr.length; i++) {
    for (var j = i+1; j<arr.length; j++) {
      if (arr[i] > arr[j]) {
        var tmp = arr[i]
        arr[i] = arr[j]
        arr[j] = tmp
      }
    }
  }
  return arr;
}

// 二分排序(递归)
function merge(arr) {
  if(arr.length<=1) return arr;
  var middle = arr.splice([arr.length >> 1], 1);
  var left = [];
  var right = [];
  for(var i= 0; i<arr.length; i++) {
    if (arr[i]<=middle) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return merge(left).concat(middle, merge(right))
}