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的顺序进行排序。根据转换时元素在表中的顺序来决定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中应用于数字数据类型的排序方法:
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' }
示例
以下示例说明了集合:
const setNumberArray = new Set ( [ 1,2,3 ] );
console.log(setNumberArray);
输出
Set { 1, 2, 3 }
问题描述讨论了Set与数字之间的关系,注意sort方法不是直接作用于Set上的,而是我们需要间接地处理这种情况,首先对数字数组进行排序,然后将数组转换为Set,使用JavaScript。
步骤
步骤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 ]
下面提到的代码是在看到问题描述时一个人可以想到的直接的代码,后来你当然可以对其进行优化,使其占用更好的空间和时间,使其更高效、高质量。
在以上代码中,我们声明了一个函数,该函数接收数组输入。然后我们通过了解排序机制以及使用自定义函数对数字数组进行排序,然后将其转换为一个解决问题陈述的集合。
时间复杂度
Array.sort()方法基于时间排序算法,给出了时间复杂度为O(n log n),在最坏的情况下,时间复杂度变为O(n^2)。
结论
这就是我们如何以逻辑思维和编码上下文为基础解决上述问题陈述的方法,利用javascript方法sort和数据类型set的最有效用例。