排序算法(二) 选择排序

参考 Java排序算法(二):简单选择排序
冒泡排序在不断地交换,而简单排序只会在找到最小值时才交换,复杂度仍然是O(n2)

排序算法(二) 选择排序_第1张图片
Paste_Image.png
// 在无序区中选出最小的元素,然后将它和无序区的第一个元素交换位置。
// 原理跟冒泡排序一样,算是冒泡的衍生版本
function sort7(array) {
  var len = array.length,
  i, j, k, tmp, result;

  result = array.slice(0);
  for (i = 0; i < len; i++) {
    k = i;
    for (j = i + 1; j < len; j++) {
      if (result[j] < result[k]) k = j;
    }
    if (k != i) {
      tmp = result[k];
      result[k] = result[i];
      result[i] = tmp;
    }
  }
  return result;
}

[算法特点]
时间复杂度:需要进行1+2+3+...+(n-1)=n*(n-1)/2,复杂度为O(n^2)。
该算法最大的特点就是交换移动数据次数相当少,这会节约相应的时间。分析它的时间复杂度你会发现,无论最好最差的情况,其比较次数都是一样的多。
简单选择排序的性能上还是要略优于冒泡排序。

你可能感兴趣的:(排序算法(二) 选择排序)