在 JavaScript 中将数字数组排序成集合


在给定的问题陈述中,我们被要求将数字数组排序成一些集合,其中数组是由用户提供的输入源,从蛮力方法到优化的解决方案。

什么是 JavaScript 中的数组?

如果您熟悉其他编程语言,例如 C、C++ 或 Java,您一定听说过“数组”这个术语。

在编程中,数组是在一个屋檐下收集相似数据元素。

现在,一个重要的问题出现了:如果数组在所有语言中通常都是相同的,那么 JavaScript 如何使数组更独特和可用?

让我们了解 JavaScript 中数组的整体工作原理。

数组是一个存储多个元素的对象。由于数组也是一个对象,因此它具有一些属性和方法,使在 JavaScript 中处理数组更容易。

示例

以下是 JavaScript 中定义数组的语法:-

const arrayExample  = [ 100 , 200 , 500 ,600 ];
console.log(arrayExample);

输出

[ 100, 200, 500, 600 ]

什么是 JavaScript 中的 sort 方法?

javascript 中的 sort 方法会就地排序数组,并默认按升序生成排序后的数组。但是 JavaScript 语言在这里有一个陷阱,它首先将您要排序的每个元素转换为字符串数据类型,然后执行排序。

在 JavaScript 中,sort 方法在幕后不仅执行像许多其他编程语言那样用于排序的比较,而且一旦每个元素最初转换为字符串,这些转换完全基于 UTF-16,然后是元素在转换时的顺序,决定了 JavaScript 中 sort 方法的排序参数。UTF-16 允许在您的域中使用更多字符和表情符号,因此希望进行高效且大规模的排序。

此示例将使您更好地理解 Javascript 中的 sort 方法

const arrOfNumbers = [ 10 , 5 , 1 ] ;

console.log(arrOfNumbers.sort());

Expected Output 
[ 1 , 5 , 10 ] 

Real Output 

[ 1, 10, 5 ]

输出看起来很奇怪,对吧?因为这是由于 javascript 的字符串转换步骤,排序在幕后是如何工作的。在这里,排序可以有效地处理字符串数据类型。

const strOfNumbers = ['c', 'z', 'a'];
console.log(strOfNumbers.sort());
Expected Output 
[ 'a', 'c', 'z' ]
Real Output 
[ 'a', 'c', 'z' ]

这就是应该理解问题陈述的重点所在,因为我们需要首先对数字数组进行排序,然后将其放入集合数据结构中。

数字数组的排序

对数字数组进行排序需要一个名为 compare() 的辅助函数,该函数根据数字数据类型比较和对比数组中存在的数字。

比较函数可以返回负数、零或正数,这可以成为排序算法的基础。

此示例将使您更好地理解在 Javascript 中应用于数字数据类型的 sort 方法

const arrOfNumbers = [10, 5, 1];
console.log(arrOfNumbers.sort((x, y) => x - y));
Expected Output 
[ 1, 5, 10 ]
Real Output 
[ 1, 5, 10 ]

什么是 JavaScript 中的 Set?

JavaScript 中的 Set 引入于 es6,它是一个元素集合,其中 Set 中存在的每个元素都必须维护其唯一性,并丢弃重复项。此外,Set 不会以您添加元素的方式维护元素的顺序,因为 Set 不会维护索引属性来支撑元素的顺序。

示例

以下示例说明了 Set

const setStringArray = new Set("javascript");
console.log(setStringArray);

输出

Set { 'j', 'a', 'v', 's', 'c', 'r', 'i', 'p', 't' }

示例

以下示例说明了 Set

const setNumberArray = new Set ( [ 1,2,3 ] );
console.log(setNumberArray);

输出

Set { 1, 2, 3 }

问题陈述谈到了 Set 与数字的关系,请注意 sort 方法不能直接作用于 Set,在这种情况下,我们需要间接地工作,首先对数字数组进行排序,然后将数组转换为 JavaScript 中的 Set。

算法

步骤 1:声明一个名为 sortedArrayInSet 的主函数,该函数将数字数组作为输入

步骤 2:获取数字数组,将由另一个名为 sortArray 的辅助函数进行排序,该函数是一个自定义函数,用于如上所述对数字数组进行排序,javascript 中的排序是如何在幕后工作的。

步骤 3:因为 Set 不能直接排序,所以我们首先将数字数组作为输入,对其执行排序机制,然后将排序后的数字数组使用 new Set() 功能转换为 Set 数据类型。

步骤 4:结果是 JavaScript 中数字数组排序成 Set。

示例

function sortArray ( num1 , num2 )
{
  return num1 - num2 ;
};

function sortedArrayInSet ( arr )
{
   const finalSortedArray = arr.sort(sortArray);
   const finalSortedSet= new Set(finalSortedArray);
   console.log("sorted array of numbers into set " , finalSortedArray);
}

const arrOfNumbers = [ 20000 , 12 , -9 , 23 , 100 , -76 ];
sortedArrayInSet(arrOfNumbers);

输出

sorted array of numbers into set :  [ -76, -9, 12, 23, 100, 20000 ]

以下提到的代码是查看问题陈述时可以想到的直接代码,稍后当然可以将其优化到更好的空间和时间质量,使其更有效率和高质量。

在上面的代码中,我们声明了一个接收数组输入的函数。然后我们通过了解排序机制并首先使用自定义函数对数字数组进行排序,然后将其转换为解决您可能需要的某个问题陈述的 Set 来间接进行操作。

时间复杂度

Array.sort() 方法基于时间排序算法,时间复杂度为 O(n log n),在最坏情况下,时间复杂度变为 O(n^2)。

结论

这就是我们如何通过逻辑思考和编码上下文解决上述问题陈述,利用 javascript 方法 sort 和数据类型 set 在其最有效的用例中。

更新于:2023-08-22

194 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告