javascript排序算法总结
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排序算法总结相关推荐
- 优雅的 JavaScript 排序算法(ES6)
面试官:小伙子排序算法了解吗? 回答:我能写出来四种冒泡排序,两种选择排序,两种插入排序,两种哈希排序,两种归并排序,两种堆排序,四种快速排序. 用我自己的方式. 本文中常使用 swap 函数,在这里 ...
- php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...
- JavaScript排序算法
一.冒泡排序 1.什么是冒泡排序? 冒泡排序的英文Bubble Sort,是一种最基础的交换排序.之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动. 2.冒泡 ...
- JavaScript排序算法:快速排序
快速排序法 1 从数列中挑出一个元素,称为 "基准"(pivot) 2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边) ...
- JavaScript排序算法——插入排序算法
// 插入排序-原理解释:从数组第二项开始循环,每次循环取当前项与前边的项对比,符合条件则交换位置.function insertSort(array) { // 从第二个元素开始循环for (var ...
- JavaScript排序算法:归并排序
function mergeSort(arr) {if (Array.isArray(arr)) {if (arr.length < 2) { //数组长度小于2直接返回原数组return ar ...
- 用openAI写个js的排序算法(快速排序算法)
文章目录 一.生成JS快速排序算法 二.openai还会给出调用方法 一.生成JS快速排序算法 这是一个通用的 JavaScript 排序算法.它使用的是快速排序算法. function sort(a ...
- js排序的时间复杂度_JavaScript排序算法及性能比较
JavaScript排序算法及性能比较 类别: 技术·JS 时间:2017-03-13 19:15:30 字数:7651 版权所有,未经允许,请勿转载,谢谢合作~ #### 前言 对很多同学来说,启蒙 ...
- javascript写各种排序算法
在知乎上看到这个题目,就自己写了一下,在这里附上链接,里面有各种排序的动态图,非常形象直观,有助于新手对排序算法理解,链接:常见排序算法之JavaScript实现 首先各种排序算法都会用到的交换函数: ...
最新文章
- 如何设计一个深度学习项目
- 【Java Web开发指南】线程安全和单线程
- 苯环的神经网络C6H6
- rtmp推流时间戳兼容问题
- vue修改计算属性的值_vue之计算属性
- 2019长安大学ACM校赛网络同步赛 L	XOR (规律,数位DP)
- IT公司老板落水,各部门员工怎么救
- 卡夫卡如何分区_通过分区在卡夫卡实现订单担保人
- php获取src,PHP读取文件
- 历史上知名的反转现场
- 服务器系统read,虚拟磁盘服务器系统的开发与实现-Read.PDF
- select不能触发change_SQL之警觉触发
- 利用bootstrap的modal组件自定义alert,confirm和modal对话框
- modelsim 下载链接
- JspStudy套件部署j2ee maven项目网址问题
- 如何解救爆红的C盘?
- 我的自学ROS历程3-3-Vsual Studio code安装
- 一个jsp+cgi+html小工程,完成注册,后台使用CGI
- android系统裁剪优化
- 怎样在线完成视频转gif制作?一招视频转gif在线制作
热门文章
- 《聪明的投资者》笔记
- 计算机科学与技术的班会,计算机科学与技术系开展“计科方向和知识储备”主题班会...
- 仿真鸟群-Python实现(Win11)
- Photoshop-消失点滤镜做透视图
- 71.android 简单的电话录音并保存到本地(来电和去电都支持)
- 多数据源@DS的使用
- 安兔兔评测HTML5,安兔兔评测
- 所谓“腹有诗书气自华”,为何你读了那么多书却不见效果?
- 苹果iPhone自带高通5G基带,对安卓机的影响
- OBS采集黑屏问题解决