首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript快速排序二维数组

快速排序是一种常用的排序算法,它通过将数组分割成较小的子数组,然后递归地对子数组进行排序,最终将整个数组排序。

在JavaScript中,可以使用以下代码实现快速排序算法来对二维数组进行排序:

代码语言:txt
复制
function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  
  const pivot = arr[0];
  const left = [];
  const right = [];
  
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  
  return [...quickSort(left), pivot, ...quickSort(right)];
}

const arr = [[3, 1], [2, 4], [1, 2], [4, 3]];
const sortedArr = quickSort(arr);
console.log(sortedArr);

上述代码中,我们定义了一个quickSort函数,它接受一个二维数组作为参数,并返回排序后的二维数组。在函数内部,我们首先判断数组的长度是否小于等于1,如果是,则直接返回该数组。否则,我们选择数组的第一个元素作为基准值(pivot),然后遍历数组的剩余元素,将小于基准值的元素放入left数组,将大于等于基准值的元素放入right数组。最后,我们使用递归调用quickSort函数对leftright数组进行排序,并将排序后的结果与基准值拼接起来,返回最终的排序结果。

对于二维数组的快速排序,我们可以根据二维数组的特定列进行排序,例如按照第一列进行排序或按照第二列进行排序。如果需要按照第一列进行排序,可以将上述代码中的比较逻辑修改为arr[i][0] < pivot[0]arr[i][0] >= pivot[0];如果需要按照第二列进行排序,可以将上述代码中的比较逻辑修改为arr[i][1] < pivot[1]arr[i][1] >= pivot[1]

快速排序算法的优势在于其平均时间复杂度为O(nlogn),并且具有原地排序的特点,不需要额外的存储空间。它在处理大规模数据时表现良好,并且可以通过优化算法来提高性能。

快速排序适用于各种类型的数据,包括二维数组。在二维数组中,可以根据特定的列进行排序,以满足不同的需求。

腾讯云提供了多种云计算相关的产品,例如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 数组排序——快速排序

数组中的快速排序就是取原始数组中的一个元素最为基点,小于基点的放在一个数组中,大于基点的放在一个数组中,无限循环,知道将数组分解到长度(length<1)停止 var arr = [12, 3, 569...56, -56, -56, 1223, 11, 16, 13, 1]; function quickSort(arr) { if (arr.length < 1) return arr;分解数组..., 1);将寻找到的基点的元素进行保存 var left = [];创建新数组 var right = [];创建新数组 遍历寻找完基点的数组 for (var i =...0; i < arr.length; i++) { 利用寻找的基点进行划分 小于寻找到的基点放在一个数组中 大于寻找到的基点放在一个数组中 if (basic[0]...left.push(arr[i]); } else { right.push(arr[i]); } } 将分割完成的数据+寻找的基点进行组合,形成排序后的新数组

72030
  • Java二维数组排序

    Java二维数组排序 Java二维数组排序 Java二维数组排序 关于Java二维数组排序方法之一是把二维数组放进一维数组然后试用版Arrays.sort();进行排序排序结束后再把一维数组内容重新写入二维数组内...,代码实现如下: 为了方便,我在这里使用了随机数生成方法Math.random()进行随机数生成,依次写入二维数组内: import java.util.*; public class P11{...int i=0;i<arr.length;i++){ System.out.println(Arrays.toString(arr[i])); } } } 因为使用了随机数生成的数组内容...,所以每次运行数组内容都不尽相同,本次运行结果如下: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131551.html原文链接:https://javaforall.cn

    1K20

    JavaScript数组-冒泡排序

    数组的冒泡排序算法也算一道经典面试题了,这里也给大家分享一下JavaScript中关于数组的冒泡排序的写法和思路,这里将代码封装成了函数需要的朋友可以直接赋值使用,代码中具有详细的注释: 先给大家上代码...: //sort函数需要接收两个值:第一个是需要排序数组,第二个是排序的方式(从小到大/从大到小) function sort (arr,num) {...=0则从大到小排 var one = [2, 4, 5, 1, 3]; // 需要排序数组 var tow = 0; // 决定排序方式:0表示从小到大,非0表示从大到小...:就是将数组中每相邻的两个项数进行比较按照一定的顺序(从大到小/从小到大)进行排序,一轮排好一个数,经过有限轮次的比较后即可按需求排好数组的项数。...5和1的位置,在然后5和3比较也同样不符合规则所以更换位置,所以第一轮排序数组变成了[2, 4, 1, 3, 5],从小到大的顺序此时一轮下来已有一个数字找到了自己正确的位置,然后看似还有四个数都不在它们正确的位置上

    44620

    JavaScript数组排序总结

    工作中经常用到的几种排序方式,整理出来分享给大家。 ---- 1、array排序函数sort  使用Array的sort方法。...将数组中的相邻两个元素进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾)。...,直到完成排序。...//插入 arr[j+1] = guard; } } console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8] 5、快速排序... 快速排序涉及到了递归,将一个数组排序问题看成是两个小数组排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。

    38410

    array.sort排序_javascript数组排序

    数组sort排序方法 Array数组对象中的sort方法是根据数组数组元素的字符编码进行排序的,所以对数字的排序,会跟想要的升序结果不一样 通过设置sort()方法的参数可以按照自定义的排序方式对数组进行排序...,sort()方法的参数是一个函数,需要自定义该函数,sort()方法会根据函数的返回结果对数组进行排序 function compare (a, b) { return a - b; } //...函数返回结果小于0,a排在b前;函数返回结果大于0,a排在b后面 // 升序效果 function compare(a, b) { return b - a; } // 降序效果 对数组进行升序排序...: 对数组中的字符串按照字符串长度进行升序排序: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169883.html原文链接:https://javaforall.cn

    57840

    前端开发:javascript数组排序

    在面试时候,会经常考到排序算法,下面列举javascript常用的排序算法。...冒泡排序 通过相邻两个元素之间的比较和交换,使较大的元素逐渐从前面移向后面(升 序),就像水底下的气泡一样逐渐向上冒泡,所以被称为“冒泡”排序。...temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; } console.log(arrayMax(arr)); 快速排序...元素的比较和交换是从两端向中间进行的,较大的元素一轮就能够交换到后面的位置,而较小的元素一轮就能交换到前面的位置,元素每次移动的距离较远,所以比较次数和移动次数较少,速度较快,故称为“快速排序”。...("第"+(++times)+"次排序后:"+arr); } //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; return queryArrayMax(left).concat

    48020

    数组查找、冒泡排序快速排序(一)

    数组查找数组查找是一种常见的算法,用于在一个已排序或未排序数组中查找指定的值。常用的数组查找算法包括线性查找、二分查找、哈希表查找等。线性查找线性查找是最简单的一种查找算法,也称为顺序查找。...它的实现非常简单,只需要从数组的第一个元素开始逐个遍历,直到找到目标元素或者遍历到数组的最后一个元素为止。如果找到了目标元素,就返回它的下标;否则返回-1,表示未找到。...n; i++) { if (arr[i] == x) { return i; } } return -1;}二分查找二分查找是一种针对有序数组的查找算法...它的实现原理是:首先确定数组的中间元素,然后将待查找的值与中间元素进行比较,如果相等则返回中间元素的下标;如果待查找的值比中间元素小,则在数组的左半部分继续查找;如果待查找的值比中间元素大,则在数组的右半部分继续查找...} else { right = mid - 1; } } return -1;}哈希表查找哈希表是一种基于哈希函数实现的数据结构,可以快速地进行查找

    39820

    数组查找、冒泡排序快速排序(二)

    冒泡排序冒泡排序是一种简单的排序算法,它的实现原理是:每次比较相邻的两个元素,如果它们的顺序不正确就交换它们的位置,这样每一轮排序都会将最大的元素冒泡到数组的末尾。...快速排序快速排序是一种常用的排序算法,它的实现原理是:首先选择一个基准元素,然后将小于等于基准元素的元素放到它的左边,大于基准元素的元素放到它的右边,然后分别对左右两部分进行递归排序。...由于快速排序采用了分治的思想,因此它的时间复杂度为O(n log n)。...下面是一个实现快速排序的示例代码:void quickSort(int arr[], int left, int right) { if (left >= right) { return...i++; j--; } } quickSort(arr, left, j); quickSort(arr, i, right);}以上是快速排序的示例代码

    34631

    c++ sort 二维数组排序_二维数组升序排列

    以往遇到行排列问题(按每行的字典序排序)的时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样的效果呢?...实验内容:利用二维数组进行“三级排序” 测试1:使用c++内置的普通型二维数组 #include #include using namespace std;...分析原因,应该是数组名a和一维数组名a[0]、a[1]均为const类型指针,排序时无法交换它们而导致错误。...测试3:利用STL中的vector容器进行排序 即利用vector>容器模拟二维数组进行排序 #include #include #...cmp); for(auto p : vec) cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<endl; return 0; } 看起来好像STL方便一些~ 总结:利用二维数组进行排序还是挺麻烦的

    1.7K30

    快速排序 数组+递归实现

    快速排序 数组+递归实现 问题描述: 给定N个元素的数组arr[N],需要把数组arr中的数排成非递减的次序并输出. 基本思想: 1....用一个自定义的分割方法split()选取用来作分割的元素(也称为partition主元),最简单的分割方法是选定待排范围的第一个数为partition主元,一趟快排完成后,主元e是数组arr中第i个元素...使用两个跟踪变量(forward和backward),递归地对从i到backward采用快速排序方法quickSort(),并递归地对从forward到i采用快速排序方法quickSort(); 3...注: 数组arr=L区间(主元e左边的部分)+主元e+U(未排序部分)+R(主元e右边的部分),其中区间U是区间L与区间R夹住的部分,每次递归都是让U缩小,直到为0,此时快排结束......quickSort(arr, part_pos+1, backward); // 递归地给主元e右侧元素排序 } int split(int arr[], int forward, int

    64420

    数组快速排序再解

    我们以前是写过数组快速排序的例子的,当时因为时间问题并没有详细记录快速排序的过程是怎么样的。本文在此对数组快速排序做一个详解,希望对学习者有所帮助。...快速排序的思想是抽取一个基准数(一般用数组的第一个元素),抽取的这个元素位置空出,用来交换数据。然后声明两个变量 i 和 j 分别指向数组的头和尾的下标。...然后优先从数组的右侧一个元素一个元素的与基准数做对比,如果找到比基准数小的数据就放到数组左侧(抽取基准数后空出的位置),放到数组左侧后,这个数据的位置被空出,此时右侧停止对比。...此时重点就是再次将基准数坐标的小数组和右边的小数组根据上面的逻辑排序(递归),最终得出排序后的数据。如果你看文字非常繁琐,可以尝试看一下下面的图更容易理解。...此时i和j同时指向最终的空位 // 把基准数放到这个空位中 arr[i] = temp; // 递归,把基准数左侧和右侧的数据再次按上面的方法排序

    13630
    领券