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

javascriptweb developmentfront end technologyobject oriented programming

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

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

这个例子会让你更了解 Javascript 中的排序方法:

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());
预期输出
[ 'a', 'c', 'z' ]
实际输出
[ 'a', 'c', 'z' ]

这是应该了解问题陈述的重点的地方,因为我们需要先对数字数组进行排序,以将其放入一组数据结构形式中。

对数字数组进行排序

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

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

该示例将使您更好地了解 Javascript 中应用于数字数据类型的排序方法:

const arrOfNumbers = [10, 5, 1];
console.log(arrOfNumbers.sort((x, y) => x - y));
预期输出
[ 1, 5, 10 ]
实际输出
[ 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' }

示例

以下示例说明了集合:

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

输出

Set { 1, 2, 3 }

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

算法

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

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

步骤 3:由于 Set 不能直接排序,我们首先有一个数字数组作为执行排序机制的输入,然后使用新的 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("将数字数组排序放入集合 " , finalSortedArray);
}

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

输出

将数字数组排序放入集合:[ -76, -9, 12, 23, 100, 20000 ]

下面提到的代码是查看问题陈述时可以想到的直接代码,稍后您当然可以对其进行优化,以获得更好的空间和时间质量,使其更高效、更高质量。

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

时间复杂度

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

结论

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


相关文章