Radix Sort(基数排序)是一种非比较型的排序算法,它根据数字的每个位上的值进行排序。它的时间复杂度为O(nk),其中n是待排序元素的个数,k是数字的最大位数。Radix Sort算法可以在整数、字符串等数据类型上使用,但在本文中,我们将以整数作为示例。

文章目录

算法思想

Radix Sort算法的基本思想是通过将待排序元素按照每个位上的值进行分组,然后依次对每个位进行排序。具体来说,它从最低位开始,先根据最低位的值进行排序,然后根据次低位的值进行排序,依次类推,直到最高位排序完成。

算法步骤

  1. 找到待排序数组中的最大值,确定排序的轮数(即最大位数)。
  2. 对于每一位(从最低位到最高位),使用稳定的排序算法(如计数排序)对待排序数组进行排序。
  3. 重复第2步,直到对所有位都进行了排序。

JavaScript代码实现

下面是使用JavaScript实现Radix Sort算法的示例代码:

// 计数排序
function countingSort(arr, exp) {
  const n = arr.length;
  const output = new Array(n).fill(0);
  const count = new Array(10).fill(0);

  for (let i = 0; i < n; i++) {
    const index = Math.floor(arr[i] / exp) % 10;
    count[index]++;
  }

  for (let i = 1; i < 10; i++) {
    count[i] += count[i - 1];
  }

  for (let i = n - 1; i >= 0; i--) {
    const index = Math.floor(arr[i] / exp) % 10;
    output[count[index] - 1] = arr[i];
    count[index]--;
  }

  for (let i = 0; i < n; i++) {
    arr[i] = output[i];
  }
}

// Radix Sort算法
function radixSort(arr) {
  const max = Math.max(...arr);

  for (let exp = 1; Math.floor(max / exp) > 0; exp *= 10) {
    countingSort(arr, exp);
  }

  return arr;
}

// 示例
const arr = [170, 45, 75, 90, 802, 24, 2, 66];
const sortedArr = radixSort(arr);
console.log(sortedArr);  // 输出:[2, 24, 45, 66, 75, 90, 170, 802]

在上述代码中,我们使用了计数排序作为稳定的排序算法来对每个位进行排序。首先,我们找到待排序数组中的最大值,确定排序的轮数。然后,通过循环对每个位进行排序,直到所有位都排序完成。

总结

Radix Sort算法是一种非比较型的排序算法,它根据数字的每个位上的值进行排序。它的时间复杂度为O(nk),适用于整数、字符串等数据类型。在JavaScript中,我们可以使用计数排序作为稳定的排序算法来实现Radix Sort。通过图解和示例代码,我们希望能够帮助读者更好地理解和应用Radix Sort算法。

© 版权声明
分享是一种美德,转载请保留原链接