javascript排序算法总结

这里是对数据结构中的几种算法做一个总结
简单的排序算法有:①冒泡排序 ②选择排序 ③插入排序
高级的排序算法有: ①希尔排序 ②快速排序

一、冒泡排序

如图所示为冒泡排序的步骤

这里冒泡排序的查找的时间复杂度是O(n ^ 2),交换的时间复杂度是O(n^2)。

二、选择排序

如图所示为选择排序的一般步骤

其思路就是找到剩下的元素中最小的一个,然后进行交换,其时间复杂度是O(n ^ 2),比冒泡排序效率高一些

三、插入排序

如图所示下面是插入排序的一般步骤

其基本思路就是:将后面为排序的元素,取出依次比较然后插入前面已经排好序的元素。
其时间复杂度是O(n ^2),但是相对于前面的算法,比较来说效率更高。

四、希尔排序

如图所示下面是插入排序的一般步骤

希尔排序实现思路:首先进行分组,然后将分组的进行插入排序,随后设置组的跨度逐渐减小,当组的跨度为1的时候,就是插入排序。
增量设置:
一、希尔排序原版中增量是N/2
二、Hibbard增量为2k-1,选择的是奇数,当有100个数的时候,选择增量就是51,这种增量最坏的时间复杂度是O(N^3/2),猜想的平均复杂度是O(N5/4)
三、Sedgewick增量
{1,5,19,41,109…},这种增量的最坏的复杂度是O(N^4/3),平均复杂度是O(N ^ 7/6)

五、快速排序

如图所示

思路设计:这里使用到递归处理。这里为了尽可能的让选择的元素处于中间,首先应该将left和right以及中间元素进行比较,三个位置进行从小到大的顺序排列如图所示

全部代码实现如下:

<script>
function ArrayList() {// 属性this.arrayList = [];// 方法// 1、插入方法ArrayList.prototype.insert = function (item) {this.arrayList.push(item);}// 2、实现toStringArrayList.prototype.toString = function () {return this.arrayList.join("——");}// 3、实现两者交换ArrayList.prototype.swap = function (m, n) {let temp = this.arrayList[m];this.arrayList[m] = this.arrayList[n];this.arrayList[n] = temp;}// 4、实现冒泡排序ArrayList.prototype.bubbleSort = function () {let length = this.arrayList.length;for (let i = length - 1; i >= 0; i--) {for (let j = 0; j < i; j++) {if (this.arrayList[j] > this.arrayList[j + 1]) {this.swap(j, j + 1)}}}}// 5、实现选择排序ArrayList.prototype.selectionSort = function () {let length = this.arrayList.length;for (let j = 0; j < length - 1; j++) {let min = j;for (let i = min + 1; i < length; i++) {if (this.arrayList[min] > this.arrayList[i]) {min = i;}}this.swap(min, j);}}// 6、实现插入排序ArrayList.prototype.insertSort = function () {let length = this.arrayList.length;for (let i = 1; i < length; i++) {let temp = this.arrayList[i];let j = i;while (temp < this.arrayList[j - 1] && j >= 0) {this.arrayList[j] = this.arrayList[j - 1];j--;}this.arrayList[j] = temp;}}// 7、实现希尔排序ArrayList.prototype.shellSort = function () {let length = this.arrayList.length;let gap = Math.floor(length / 2);while (gap >= 1) {for (let i = gap; i < length; i++) {let temp = this.arrayList[i];let j = i;while (temp < this.arrayList[j - gap] && j > gap - 1) {this.arrayList[j] = this.arrayList[j - gap];j -= gap;}this.arrayList[j] = temp;}gap = Math.floor(gap / 2);}}// 8、实现快速排序枢纽的代码ArrayList.prototype.median = function (left, right) {let medi = Math.floor((left + right) / 2);if (this.arrayList[left] > this.arrayList[medi]) {this.swap(left, medi);}if (this.arrayList[left] > this.arrayList[right]) {this.swap(left, right);}if (this.arrayList[medi] > this.arrayList[right]) {this.swap(medi, right);}this.swap(medi, right - 1);return this.arrayList[right - 1];}// 9、实现快速排序代码ArrayList.prototype.quickSort = function () {let length = this.arrayList.length;this.quick(0, length - 1);}// 快速排序算法递归实现ArrayList.prototype.quick = function (left, right) {if (left >= right) return;let mid = this.median(left, right);let i = left;let j = right - 1;while (i < j) {while (this.arrayList[++i] < mid) {}while (this.arrayList[--j] > mid) {}if (i < j) {this.swap(i, j);} else {break;}}this.swap(i, right - 1);this.quick(left, i - 1);this.quick(i + 1, right);}
}
</script>

希尔排序和快速排序的时间复杂度都要小于O(n^2)。

javascript排序算法总结相关推荐

  1. 优雅的 JavaScript 排序算法(ES6)

    面试官:小伙子排序算法了解吗? 回答:我能写出来四种冒泡排序,两种选择排序,两种插入排序,两种哈希排序,两种归并排序,两种堆排序,四种快速排序. 用我自己的方式. 本文中常使用 swap 函数,在这里 ...

  2. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

  3. JavaScript排序算法

    一.冒泡排序 1.什么是冒泡排序? 冒泡排序的英文Bubble Sort,是一种最基础的交换排序.之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动. 2.冒泡 ...

  4. JavaScript排序算法:快速排序

    快速排序法 1 从数列中挑出一个元素,称为 "基准"(pivot) 2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边) ...

  5. JavaScript排序算法——插入排序算法

    // 插入排序-原理解释:从数组第二项开始循环,每次循环取当前项与前边的项对比,符合条件则交换位置.function insertSort(array) { // 从第二个元素开始循环for (var ...

  6. JavaScript排序算法:归并排序

    function mergeSort(arr) {if (Array.isArray(arr)) {if (arr.length < 2) { //数组长度小于2直接返回原数组return ar ...

  7. 用openAI写个js的排序算法(快速排序算法)

    文章目录 一.生成JS快速排序算法 二.openai还会给出调用方法 一.生成JS快速排序算法 这是一个通用的 JavaScript 排序算法.它使用的是快速排序算法. function sort(a ...

  8. js排序的时间复杂度_JavaScript排序算法及性能比较

    JavaScript排序算法及性能比较 类别: 技术·JS 时间:2017-03-13 19:15:30 字数:7651 版权所有,未经允许,请勿转载,谢谢合作~ #### 前言 对很多同学来说,启蒙 ...

  9. javascript写各种排序算法

    在知乎上看到这个题目,就自己写了一下,在这里附上链接,里面有各种排序的动态图,非常形象直观,有助于新手对排序算法理解,链接:常见排序算法之JavaScript实现 首先各种排序算法都会用到的交换函数: ...

最新文章

  1. 如何设计一个深度学习项目
  2. 【Java Web开发指南】线程安全和单线程
  3. 苯环的神经网络C6H6
  4. rtmp推流时间戳兼容问题
  5. vue修改计算属性的值_vue之计算属性
  6. 2019长安大学ACM校赛网络同步赛 L XOR (规律,数位DP)
  7. IT公司老板落水,各部门员工怎么救
  8. 卡夫卡如何分区_通过分区在卡夫卡实现订单担保人
  9. php获取src,PHP读取文件
  10. 历史上知名的反转现场
  11. 服务器系统read,虚拟磁盘服务器系统的开发与实现-Read.PDF
  12. select不能触发change_SQL之警觉触发
  13. 利用bootstrap的modal组件自定义alert,confirm和modal对话框
  14. modelsim 下载链接
  15. JspStudy套件部署j2ee maven项目网址问题
  16. 如何解救爆红的C盘?
  17. 我的自学ROS历程3-3-Vsual Studio code安装
  18. 一个jsp+cgi+html小工程,完成注册,后台使用CGI
  19. android系统裁剪优化
  20. 怎样在线完成视频转gif制作?一招视频转gif在线制作

热门文章

  1. 《聪明的投资者》笔记
  2. 计算机科学与技术的班会,计算机科学与技术系开展“计科方向和知识储备”主题班会...
  3. 仿真鸟群-Python实现(Win11)
  4. Photoshop-消失点滤镜做透视图
  5. 71.android 简单的电话录音并保存到本地(来电和去电都支持)
  6. 多数据源@DS的使用
  7. 安兔兔评测HTML5,安兔兔评测
  8. 所谓“腹有诗书气自华”,为何你读了那么多书却不见效果?
  9. 苹果iPhone自带高通5G基带,对安卓机的影响
  10. OBS采集黑屏问题解决