vlambda博客
学习文章列表

1月第1题:如何优化简单的选择排序算法?


  • 选择排序的基本思想:每次循环取出最小(最大)元素作为首元素;

  • 算法实现时,每次确定最小元素时都会通过不断比较并且交换,来保证首位置最小;

  • 不难发现,在确定最小之前的交换都是没有意义的。我们可以设置一个变量 min 来记录最小值的下标,最后在执行交换操作即可。

function selectSort(array) { let length = array.length; // 如果不是数组或者数组长度小于等于 1,直接返回,不需要排序  if (!Array.isArray(array) || length <= 1) return; for (let i = 0; i < length - 1; i++) { let minIndex = i;  // 设置当前循环最小元素索引  for (let j = i + 1; j < length; j++) {  // 如果当前元素比最小元素索引,则更新最小元素索引  if (array[minIndex] > array[j]) {  minIndex = j;  }  } // 交换最小元素到当前位置  [array[i], array[minIndex]] = [array[minIndex], array[i]]; } return array;}