前言
今天在js里使用sort时遇见了一个不理解的现象
即使用sort默认排序后 9 从排序前的第一位被排到了最后一位.一开始我对js sort的理解和c一样,然后通过查阅后发现并不是这样.
正文
排序是一项常见而重要的操作。不同的编程语言提供了不同的排序函数,它们在默认排序行为上可能存在一些差异。本文将比较C语言和JavaScript中的默认排序行为,突出它们的异同点以及如何正确使用排序函数。
C语言中的排序:qsort函数
在C语言中,排序操作通常使用标准库中的qsort
函数来实现。qsort
函数允许用户自定义比较函数来指定排序规则。默认情况下,qsort
函数使用的是C标准的字典序,即按照字符的ASCII码值进行排序。这意味着如果你直接使用qsort
函数来排序整数数组,可能会得到不符合预期的结果。
为了正确排序整数数组,你需要自定义一个比较函数,该函数会比较两个元素的大小并返回相应的比较结果。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = { 5, 2, 8, 1, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
JavaScript中的排序:sort函数
JavaScript中的数组排序使用sort
函数。然而,与C语言不同,JavaScript的sort
函数默认将数组元素转换为字符串,然后按照字典序进行排序。这可能导致在排序数字数组时出现意外的结果。为了正确排序数字数组,你需要自定义一个比较函数,该函数会根据数字的大小来决定排序顺序。
感谢大哥的解答:
结论
虽然C语言和JavaScript都提供了排序函数,但它们的默认排序行为存在差异。C语言的qsort
函数默认使用字典序(ASCII码值)进行排序,而JavaScript的sort
函数默认将数组元素转换为字符串并按照字典序排序。为了在这两种语言中正确地排序数字数组,最好自定义比较函数,并根据比较结果确定排序顺序。