返回

数组排序:冒泡排序、选择排序和反转数组的艺术

前端

数组排序:冒泡排序与选择排序

数组排序是一种至关重要的数据操作技术,它允许我们按照特定的顺序排列数组中的元素。有各种各样的排序算法可供选择,而冒泡排序和选择排序是最简单、最容易理解的两种算法。

冒泡排序

冒泡排序通过比较相邻元素并交换它们的位置,将最大或最小元素“冒泡”到数组的末尾或开头。这个过程重复进行,直到数组完全排序。

// 冒泡排序(升序)
function bubbleSort(arr) {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
}

选择排序

选择排序通过寻找数组中未排序部分的最小或最大元素并将其与当前位置交换,从而逐个构建有序数组。

// 选择排序(升序)
function selectionSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
  }
  return arr;
}

数组反转

数组反转是指改变数组中元素的顺序,使其按相反的顺序排列。这可以通过多种方法实现,其中最常见的方法是使用额外的空间或原地反转。

使用额外空间

// 使用额外空间反转数组
function reverseArray1(arr) {
  const reversedArray = [];
  for (let i = arr.length - 1; i >= 0; i--) {
    reversedArray.push(arr[i]);
  }
  return reversedArray;
}

原地反转

// 原地反转数组
function reverseArray2(arr) {
  let start = 0;
  let end = arr.length - 1;
  while (start < end) {
    [arr[start], arr[end]] = [arr[end], arr[start]];
    start++;
    end--;
  }
  return arr;
}

掌握数组排序和反转算法对于各种编程任务至关重要,从数据处理到优化程序性能。通过理解这些算法背后的原理,您可以有效地处理数组,从而创建更加高效和可靠的代码。