冒泡排序、选择排序、插入排序 | JavaScript 中的数据结构和算法

冒泡排序、选择排序、插入排序 | javascript 中的数据结构和算法

排序算法是许多计算任务的支柱,在组织数据以实现高效访问和处理方面发挥着至关重要的作用。无论您是刚刚开始探索算法世界的初学者,还是希望刷新知识的经验丰富的开发人员,了解这些基本排序技术都是至关重要的。在这篇文章中,我们将探讨一些更基本的排序算法 – 冒泡排序、选择排序和插入排序。

冒泡排序

冒泡排序是一种简单的、基于比较的排序算法。它重复遍历列表,比较相邻元素,如果顺序错误则交换它们。这个过程一直持续到不再需要交换为止,表明列表已排序。虽然冒泡排序易于理解和实现,但对于大型数据集来说效率较低,因此它主要适用于教育目的和小型数据集。

冒泡排序的时间复杂度为o(n2).

// a random array of 20 numbersconst inputarray = [34, 100, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45]function bubblesort (input) {  const n = input.length  const sortedarray = [...input]  // loop n times  for (let i = 0; i < n; i++) {    // loop through all n-1 pairs    for (let j = 0; j  b, swap; else do nothing      if (sortedarray[j] > sortedarray[j+1]) {        const temp = sortedarray[j]        sortedarray[j] = sortedarray[j+1]        sortedarray[j+1] = temp      }    }  }  return sortedarray}console.log("input:", inputarray)console.log("ouput:", bubblesort(inputarray))

选择排序

选择排序是一种简单的、基于比较的排序算法。它的工作原理是将列表分为已排序区域和未排序区域。它反复从未排序区域中选择最小(或最大)元素,并将其与第一个未排序元素交换,逐渐增大排序区域。选择排序对于大型数据集来说并不是最有效的,但很容易理解,并且具有最小化交换次数的优点。

选择排序的时间复杂度为 o(n2).

// a random array of 20 numbersconst inputarray = [34, 100, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45]function selectionsort (input) {  const n = input.length  const sortedarray = [...input]  // loop n times  for (let i = 0; i < n; i++) {    // start from i'th position    let lowestnumberindex = i    for (let j = i; j < n-1; j++) {      // identify lowest number      if (sortedarray[j] < sortedarray[lowestnumberindex]) {        lowestnumberindex = j      }    }    // swap the lowest number with that in i'th position    const temp = sortedarray[i]    sortedarray[i] = sortedarray[lowestnumberindex]    sortedarray[lowestnumberindex] = temp  }  return sortedarray}console.log("input:", inputarray)console.log("ouput:", selectionsort(inputarray))

插入排序

插入排序是一种直观的、基于比较的排序算法,一次构建一个元素的最终排序列表。它的工作原理是从列表的未排序部分中获取元素并将它们插入到已排序部分中的正确位置。插入排序对于小型数据集或接近排序的数据非常有效,并且在实际应用中经常用作更复杂算法的更简单替代方案。

立即学习“Java免费学习笔记(深入)”;

插入排序的时间复杂度为o(n2).

function insertionSort (input) {  const n = input.length  const sortedArray = [...input]  // loop n times, starting at index 1  for (let i = 1; i = 0; j--) {      // if number in current index is larger than compared number, swap      if (sortedArray[j] > comparedNumber) {        sortedArray[tempIndex] = sortedArray[j]        sortedArray[j] = comparedNumber        tempIndex = j      } else {        // OPTIONAL: else exit        break      }    }  }  return sortedArray}console.log("Input:", inputArray)console.log("Ouput:", insertionSort(inputArray))

总结

虽然冒泡排序、选择排序和插入排序等基本排序算法对于大型数据集可能不是最有效的,但它们为理解算法设计提供了良好的基础。如果您觉得这篇文章有帮助,我很想听听您的想法。在下面发表评论,分享您的见解,或提出您的任何问题 – 我会尽力回答。

编码愉快!

以上就是冒泡排序、选择排序、插入排序 | JavaScript 中的数据结构和算法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:44:26
下一篇 2025年12月19日 13:44:49

相关推荐

  • c++ 冒泡排序代码 c++冒泡排序算法教程

    冒泡排序通过重复比较相邻元素并交换位置,使较大元素逐步“浮”至末尾,实现数组排序。1. 从第一个元素开始,比较相邻两元素,若顺序错误则交换;2. 每轮遍历后最大元素移至末尾;3. 对前n-1个元素重复操作直至有序。C++实现中采用swapped标志位优化,若某轮无交换则提前结束。时间复杂度最坏为O(…

    2025年12月19日
    000
  • C++如何实现冒泡排序_C++基础排序算法代码与优化

    冒泡排序通过重复比较相邻元素并交换位置实现排序,每轮将最大元素“冒泡”至末尾。1. 基本实现使用双层循环进行逐对比较与交换;2. 优化版引入swapped标志位,若某轮无交换则提前结束,最好情况时间复杂度由O(n²)提升至O(n);3. 时间复杂度最坏和平均为O(n²),最好为O(n),空间复杂度O…

    2025年12月19日
    000
  • c++怎么在运行时动态选择一个算法实现_C++策略模式与运行时决策

    策略模式通过抽象接口封装算法,使算法可在运行时动态切换。其核心由抽象策略、具体策略和上下文组成,结合智能指针管理生命周期,实现解耦与扩展,适用于排序、加密等场景。 在C++中,若想在运行时根据条件动态选择不同的算法实现,策略模式(Strategy Pattern)是一种经典且高效的设计方式。它将算法…

    2025年12月19日
    000
  • C++怎么实现一个策略模式_C++设计模式与策略模式实现

    策略模式通过封装不同算法并使其可互换,提升代码灵活性;示例中Sorter上下文调用不同排序策略,体现多态与开闭原则。 策略模式是一种行为型设计模式,它让你定义一系列算法或行为,并将每种行为封装在独立的类中,使它们可以互换使用。在C++中实现策略模式,关键在于通过基类指针调用派生类的虚函数,从而实现运…

    2025年12月19日
    000
  • C++怎么实现冒泡排序_C++排序算法与冒泡排序实现

    冒泡排序通过多轮遍历比较相邻元素并交换,使最大值逐步“浮”至末尾。1. 每轮遍历中,依次比较相邻两项,若前大于后则交换;2. 重复此过程,每轮缩小未排序部分范围;3. 加入标志位优化,若某轮无交换则提前结束。C++实现包含双重循环:外层控制轮数,内层执行比较与交换,时间复杂度最坏为O(n²),最好为…

    2025年12月19日
    000
  • c++中函数指针的定义与使用_c++函数地址与回调机制讲解

    函数指针用于存储函数地址并调用,支持回调机制;定义需匹配返回类型和参数列表,如int (funcPtr)(int, int);可指向add、sub等同签名函数,通过funcPtr(3, 4)调用;函数名即地址,赋值时&可省略,调用时也可省略;常用于实现回调,如bubbleSort传入Comp…

    2025年12月19日
    000
  • c++怎么实现冒泡排序算法_c++冒泡排序逻辑与代码实现

    冒泡排序通过相邻元素比较交换使较大元素逐步移到末尾,每轮确定一个最大值位置,共执行n-1轮,内层循环范围递减,若某轮无交换则提前结束,C++实现包含优化机制,时间复杂度最坏O(n²)、最好O(n),空间复杂度O(1),适用于小数据量或教学场景。 冒泡排序是一种基础的排序算法,核心思想是通过相邻元素的…

    2025年12月19日
    000
  • 如何在C++中对vector进行排序_C++ vector排序函数与自定义比较

    升序排序使用std::sort默认行为,降序需传入std::greater();自定义排序可使用函数指针或Lambda表达式;std::sort平均和最坏时间复杂度均为O(n log n),适用于大多数场景,但小数据量、近有序序列或需稳定排序时可考虑插入排序或std::stable_sort。 C+…

    2025年12月19日
    000
  • C++如何实现策略模式选择算法

    策略模式通过抽象接口将算法封装为独立类,实现运行时动态切换。定义SortStrategy基类声明sort虚函数,BubbleSort、QuickSort、MergeSort等具体类实现各自算法。Sorter上下文类持SortStrategy指针,通过setStrategy更换策略,performSo…

    2025年12月18日
    000
  • C++循环与算法结合实现高性能程序

    循环与算法结合可显著提升C++性能。合理选择for、while等循环结构,优先使用for循环及范围遍历以提高可读性和优化潜力。通过循环展开减少迭代次数,利用SIMD指令集(如SSE、AVX)实现数据并行处理,能大幅提升数据密集型任务效率。在算法层面,应选用高效算法(如快速排序、二分查找),并优化循环…

    2025年12月18日
    000
  • C++抽象类是什么 纯虚函数定义规范

    C++中抽象类不能实例化,必须由派生类实现其纯虚函数,用于定义接口契约;普通类可直接实例化,所有函数均有实现;接口类是仅含纯虚函数的抽象类,用于规范行为。 C++中的抽象类是一种不能直接创建对象的类,它至少包含一个纯虚函数。纯虚函数是一种特殊的虚函数,其声明以 = 0 结尾,表示该函数在基类中没有实…

    2025年12月18日
    000
  • C++如何使用指针实现数组排序操作

    使用指针可实现C++数组排序,如冒泡排序通过指针遍历比较相邻元素并交换,selectionSort用指针标记当前位置与最小值位置完成排序。 在C++中,可以利用指针来操作数组并实现排序,常见方法是结合指针和排序算法(如冒泡排序或选择排序)。指针可以代替数组下标访问元素,提升代码灵活性,同时体现C++…

    2025年12月18日
    000
  • C++如何结合策略模式优化算法选择

    策略模式通过封装不同算法为可互换对象,实现算法与客户端解耦,提升灵活性与可维护性;在C++中,借助抽象基类定义策略接口,具体策略类实现算法,上下文类通过智能指针持有策略并委托执行,客户端可动态切换算法;相比传统if-else方式,避免代码膨胀,符合开闭原则;算法选择需综合性能、数据特性、资源限制与业…

    2025年12月18日
    000
  • C++如何在数组与指针中实现数组排序和查找

    答案:使用指针可实现数组的冒泡排序和线性查找,通过指针遍历元素,arr + j 指向第 j 个元素,*(arr + j) 获取值,排序交换相邻元素,查找逐个比较直至匹配。 在C++中,数组和指针密切相关,数组名本质上是指向首元素的指针。利用这一点,我们可以使用指针操作来实现数组的排序和查找。下面介绍…

    2025年12月18日
    000
  • C++ STL最佳实践 高效使用标准库方法

    C++ STL的最佳实践,在我看来,核心在于“理解”和“选择”。它不是一套死板的规则,而更像是一种对工具箱里每件工具脾性的掌握,知道在什么场景下,哪把锤子、哪把螺丝刀能最高效地完成任务,同时避免那些看似便利实则暗藏性能陷阱的捷径。高效使用标准库,就是让代码更清晰、更健壮,也更快。 解决方案 要真正高…

    2025年12月18日
    000
  • C++策略模式应用 算法族封装替换

    策略模式通过封装算法族实现灵活替换,核心为策略接口、具体策略和上下文三部分,避免条件判断,支持运行时动态切换算法,符合开闭原则,提升代码可维护性与扩展性。 在C++中,策略模式是一种行为设计模式,它允许你定义一系列算法,并将每种算法封装起来,使它们可以互换使用。这种模式让算法的变化独立于使用它的客户…

    2025年12月18日
    300
  • C++的函数指针怎么声明 回调函数与高阶函数实现基础

    c++++中声明函数指针的核心在于指定返回类型和参数列表,其语法为返回类型(指针变量名)(参数类型1, 参数类型2, …)。例如,int (padd)(int, int)可指向int add(int a, int b)函数,通过typedef可简化复杂签名的声明,如typedef int…

    2025年12月18日 好文分享
    000
  • C++如何实现冒泡排序 C++冒泡排序的算法与代码示例

    冒泡排序的时间复杂度在最好情况下是o(n),当数组已经有序时只需遍历一次;最坏情况下是o(n^2),当数组完全逆序时需进行n-1趟比较;平均情况也是o(n^2)。优化方式包括引入swapped标志以检测是否提前完成排序,从而减少不必要的遍历。应用场景包括教学示例、数据量小或基本有序的情况,以及对性能…

    2025年12月18日 好文分享
    000
  • C++如何用指针实现数组排序?演示快速指针操作

    使用指针在c++++中实现数组排序的核心在于理解指针的算术运算和解引用操作,这样可以直接操纵数组元素。快速排序是一种适合用指针实现的常用算法,其关键在于partition函数中的指针操作。1. 初始化指针时应指向有效地址或设为nullptr;2. 释放内存后应将指针置空以避免悬挂指针;3. 避免返回…

    2025年12月18日 好文分享
    000
  • C++怎么进行代码优化 C++代码优化的常见技巧

    c++++代码优化的核心在于识别瓶颈并采取针对性措施,包括使用profiling工具(如gprof、perf)、基准测试、代码审查和依赖经验直觉来定位性能问题;接着通过减少内存分配与拷贝(如使用引用、指针、对象池、移动语义)、优化循环与算法(如循环展开、减少循环内计算、选用高效算法和标准库)、利用编…

    2025年12月18日 好文分享
    000

发表回复

登录后才能评论
关注微信