算法排序篇-2【选择排序】js解法

41 阅读1分钟

选择排序

基本思路

选择排序的大致思路是找到数据中最小的值并将其放置在第一位,接着找到第二小的值放在第二位,以此类推。

具体思路

和冒泡排序一样依然使用双层for循环,外层循环迭代数组并假设本次迭代的第一个值为数组最小值。内层循环时,以外层循环次数开始,让假设的最小值与内层循环迭代到的当前值进行比较,是否比假设值小;如果是,则改变最小值为当前值。当内层循环结束,将得出第n小的值。如果该最小值和原最小值不同,则交换其值。

解法

let array = [55,41,350,2,1];
function selectionSort(array) {
  const { length } = array;
  console.log(length);
  let indexMin;
  for (let i = 0; i < length - 1; i++) {
    indexMin = i; // 假设索引i的值为最小值
    for (let j = i; j < length; j++) {
      if (array[indexMin] > array[j]) { // 如果索引为j的值比索引为i的值小,则更换最小值的索引
        indexMin = j;
      }
      if (i !== indexMin) { // 如果最小值不是当前索引为i的值,则交换俩个值
        [array[i], array[indexMin]] = [array[indexMin], array[i]];
      }
    }
  }
  return array;
}
console.log(selectionSort(array));

复杂度

选择排序和冒泡排序都使用双层for循环,所以选择排序的复杂度也是O(n^2)。