算法的效率(冒泡排序、选择排序、快排)

本文对比了冒泡排序、选择排序和快速排序的效率,通过实验发现快速排序在处理大规模数据时,时间复杂度O(n·logn)表现最优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法的效率可以用**时间复杂度O(N)**来度量。时间复杂度反应了程序执行时间随输入规模增长而增长的量级,很大程度上能反应算法的优略程度。
我们最开始认识的排序方法有冒泡排序和选择排序但是这个算法的效率怎么样呢,让我们来测试一下。
首先,我们随机生成一个长度为100000的随机数组,并选用选择排序的方法来对数组进行排序,并测试所花的时间。
在这里插入图片描述
结果如下,大概花费了9757ms:
在这里插入图片描述
然后,我们再使用冒泡排序来测试一下。
在这里插入图片描述
我们发现,冒泡排序花费的时间更长。如下图所示:
在这里插入图片描述

下面我们了解一下适合处理较大数据的快速排序。

快速排序:把数组通过一次排序分割成三部分:左半部分、中间数、右半部分,左半部分的数全部都比右半部分小。然后对左半部分和右半部分分别再进行一次排序,再分割,这样循环下去,直到不能再分割为止。它能达到最佳和平均时间复杂度均为O(n·logn)。
tips:计算消耗时间的另一种方法:

console.time();
//这里是要计算消耗时间的代码
console.timeEnd();

快速排序算法实现如下:

let randomarr = new Array(100000)
	  .fill(0)
	  .map((item, index, array)=> index)
    .sort(()=> Math.random()-.5);

//寻找中间数
  function findMid(arr, left, right){
    while(left < right){
      while(left < right && arr[left] <= arr[right]){
        right--;
      }
      [arr[left],arr[right]] = [arr[right],arr[left]];

      while(left < right && arr[left] < arr[right]){
        left++;
      }
      [arr[left],arr[right]] = [arr[right],arr[left]];
    }
    return left;
  }
  
//快速排序算法
  function QSort(arr, start, end){
    if(start >= end) return ;
    let mid = findMid(arr, start, end);
    QSort(arr, start, mid - 1);
    QSort(arr, mid + 1, end);
  }
  console.time();
  QSort(randomarr, 0, 99999);
  console.timeEnd();

运行结果如下,与前面两种算法相比,效率大大提高:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值