Radix Sort(基数排序)是一种非比较型的排序算法,它根据数字的每个位上的值进行排序。它的时间复杂度为O(nk),其中n是待排序元素的个数,k是数字的最大位数。Radix Sort算法可以在整数、字符串等数据类型上使用,但在本文中,我们将以整数作为示例。
算法思想
Radix Sort算法的基本思想是通过将待排序元素按照每个位上的值进行分组,然后依次对每个位进行排序。具体来说,它从最低位开始,先根据最低位的值进行排序,然后根据次低位的值进行排序,依次类推,直到最高位排序完成。
算法步骤
- 找到待排序数组中的最大值,确定排序的轮数(即最大位数)。
- 对于每一位(从最低位到最高位),使用稳定的排序算法(如计数排序)对待排序数组进行排序。
- 重复第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算法。