JavaScript 实现计数排序

JavaScript 实现计数排序

在给定的任务中,我们的目标是创建一个计数排序技术,并利用JavaScript功能实现此问题。

什么是计数排序

计数排序是一种根据键值对数据集进行排序的方法。它通过计算具有不同键值的项数,并找到每个对象在排序输出中的位置来工作。计数排序的思想是将项直接放置在输出数组的正确位置上。

在算法的开始时,我们需要找到输入数组中的最大值和最小值。并利用这些值,我们需要创建一个与输入数组中的值相等长度的计数数组。计数数组将存储数组中每个不同值的出现次数。

算法使用计数数组的前缀和。因此,算法以相反的顺序遍历输入数组,并根据其计数将每个项放置在输出数组的正确位置上,并相应地递减计数。

给定问题的逻辑

在给定的问题陈述中,我们需要使用上述计数排序方法对给定数组的项目进行排序。因此,我们首先需要将输入数组作为参数,并以相同长度的新数组形式返回排序后的输出。

根据计数排序的技巧,我们需要找出输入数组中的最大值和最小值。然后,我们将遍历数组元素并计算每个项的出现次数。然后计算计数数组的前缀和。然后再次遍历数组,并将每个项放置在其正确的位置上。

步骤

步骤1: 检查给定数组是否有元素。

步骤2: 声明计数和输出数组。计数数组将用于计算每个值出现的次数。排序数组将用于保存输出数组。

步骤3: 使用for循环遍历给定数组,并计算其中每个值的重复次数。

步骤4: 根据计数排序算法计算数组的前缀和。

步骤5: 反向遍历给定数组,将每个项放置在正确的位置上。

步骤6: 最后,我们必须将输出作为排序后的数组显示出来。

代码

function countingSort(arr) {
   if (arr.length === 0) {
      return arr;
   }

   // Define the range of values in the input array
   let min = arr[0];
   let max = arr[0];
   for (let i = 1; i < arr.length; i++) {
      if (arr[i] < min) {
         min = arr[i];
      }
      if (arr[i] > max) {
         max = arr[i];
      }
   }

   // initialize the required arrays
   const count = new Array(max - min + 1).fill(0);
   const output = new Array(arr.length);

   // count the number of occurrences
   for (let i = 0; i < arr.length; i++) {
      count[arr[i] - min]++;
   }

   // calculate the prefix sum of the count array
   for (let i = 1; i < count.length; i++) {
      count[i] += count[i - 1];
   }

   // the output array in sorted order
   for (let i = arr.length - 1; i >= 0; i--) {
      output[count[arr[i] - min] - 1] = arr[i];
      count[arr[i] - min]--;
   }
   return output;
}
const arr = [30, 10, 40, 10, 50, 90, 20, 60, 50, 30, 50];
console.log(countingSort(arr));

复杂性

计数排序函数的时间复杂度为O(n+m),其中n是输入数组的长度,m是输入数组中值的范围。正如代码中所看到的,我们一次迭代数组来计算每个值的重复次数。然后我们迭代计数数组一次来计算前缀和。因此,执行代码所需的总时间为O(n+m)。空间复杂度也是O(n+m),因为我们创建了两个数组:一个是计数数组,另一个是输出数组。

结论

我们在数组中对元素进行排序的代码利用了基本的JavaScript操作来完成任务。该算法根据给定的问题陈述使用计数排序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程