常见的几种排序方法

【数据结构与算法 11,互联网大厂面试必问的JVM底层原理 int min = arr[minIndex]; for(int j = 1 + i;j<arr.length;j++){ if(min > arr[j]){ min = arr[j]; minIndex = j; } } arr[minIndex] = arr[i]; arr[i] = min; } } 4、速度测试 选择排序:120000数... 阅读详情

这里是IT修真院前端小课堂,每篇分享文从

本篇分享的是:常见的几种排序方法

1.背景介绍

在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法。 最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法(例如搜寻算法与合并算法)中是重要的, 如此这些算法才能得到正确解答。 排序算法也用在处理文字资料以及产生人类可读的输出结果。 基本上,排序算法的输出必须遵守下列两个原则:
输出结果为递增序列(递增是针对所需的排序顺序而言)
输出结果是原输入的一种排列、或是重组
虽然排序算法是一个简单的问题,但是从计算机科学发展以来,在此问题上已经有大量的研究。 更多的新算法仍在不断的被发明。

2.知识剖析

查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。 所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。 一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。 对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。
常见的几种算法:
①冒泡算法
②选择排序
③插入排序
④快速排序

3.常见问题

问题一:各种排序算法用JavaScript 如何实现?
问题二:各种排序算法的优劣及其应用?
4.解决方案
问题一:各种排序算法用JavaScript 如何实现?
问题二:各种排序算法的优劣及其应用?

4.解决方案、

冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素, 如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有元素再需要交换, 也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
冒泡排序演算法的运作如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现:

Array.prototype.bubbleSort = function () {
var i, j, temp;
for (i = 0; i < this.length - 1; i++)
for (j = 0; j < this.length - 1 - i; j++)
if (this[j] > this[j + 1]) {
temp = this[j];
this[j] = this[j + 1];
this[j + 1] = temp;
}
return this;
};

var num = [22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70];//定义一个数组
num.bubbleSort();//数组调用冒泡排序算法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, 然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同, 冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。

Array.prototype.selectionSort = function() {
var i, j, min;
var temp;
for (i = 0; i < this.length - 1; i++) {
min = i;
for (j = i + 1; j < this.length; j++)
if (this[min] > this[j])
min = j;
temp = this[min];
this[min] = this[i];
this[i] = temp;
}
return this;
};
var num = [22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70]; //定义一个数组
num.selectionSort(); //数组定义选择排序算法
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的 工作原理是通过构建有序序列,对于未排序数据, 在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序 (即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位, 为最新元素提供插入空间。
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.将新元素插入到该位置后

Array.prototype.insertionSort = function () {
for (var i = 1; i < this.length; i++) {
var temp = this[i];
var j = i - 1;
//如果将赋值放到下一行的for循环内, 会导致在第13行出现j未声明的错误
for (; j >= 0 && this[j] > temp; j–) {
this[j + 1] = this[j];
}
this[j + 1] = temp;
}
return this;
}
var num = [22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70]; //定义一个数组

num.insertionSort(); //数组调用插入排序算法
快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort), 一种排序算法, 最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较, 但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)演算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
步骤为:
从数列中挑出一个元素,称为"基准"(pivot),
重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分割(partition)操作。
递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个演算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

Array.prototype.quickSort = function () {
var len = this.length;
if (len <= 1)
return this.slice(0);
var left = [];
var right = [];
var mid = [this[0]];
for (var i = 1; i < len; i++)
if (this[i] < mid[0])
left.push(this[i]);
else
right.push(this[i]);
return left.quickSort().concat(mid.concat(right.quickSort()));
};

var arr = [5, 3, 7, 4, 1, 9, 8, 6, 2];
arr = arr.quickSort();
5.编码实战

6.扩展思考

各种排序算法的时间复杂度和空间复杂度
算法优劣评价术语
稳定性:
稳定:如果 a 原本在 b 前面,而 a = b,排序之后 a 仍然在 b 的前面;
不稳定:如果 a 原本在 b 的前面,而 a = b,排序之后 a 可能会出现在 b 的后面;
排序方式:
内排序:所有排序操作都在内存中完成,占用常数内存,不占用额外内存。
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行,占用额外内存。
复杂度:
时间复杂度: 一个算法执行所耗费的时间。
空间复杂度: 运行完一个程序所需内存的大小。

7.参考文献

参考一:JavaScript 排序算法汇总

8.更多讨论

还有那些经典排序算法?
常用的排序算法?_腾讯视频
PPT链接:常用的排序算法

几种常见的方法对数组进行排序 sort() 方法是数组原生的排序方法。默认情况下,它将数组元素转换为字符串,并按照 Unicode 编码进行排序。你可以传递一个比较函数作为参数来指定自定义的排序规则。除了使用内置的排序方法外,还可以实现自定义的排序算法。reverse() 方法用于反转数组元素的顺序。 阅读详情

相关推荐

SAP 小结

关于SAP 开发的实习就要告一段落了,从刚开始接触,到现在已经6个月了,想要很简要的把自己对SAP的理解写出来,便于以后查阅(不定期更新)。 1. 什么是SAP? 广义的SAP,可以指代SAP公司以及SAP的各种产品,它的意义要在特定语境下才能确定。一般我们所说的SAP特指SAP ERP。 SAP ERP(enterprise resource planning)是一个企业信息系统。通过这个系

Remy的博客 1950

常见排序方法大全

举例:假设数组为[5,2,4,1,3],步长为5/2=2,数组按照步长划分为[5,2]、[4,1]、[3]三个子数组,分别使用插入排序,得到[2,5]、[1,4]、[3],步长减小为2/2=1,数组按照步长划分为[2,5]、[1,4]、[3]三个子数组,使用插入排序,得到[1, 2, 3, 4, 5],最后得到有序数组。举例:假设数组为[5,2,4,1,3],将数组划分为[5,2]和[4,1,3],使用插入排序,得到[2,5]和[1,3,4],将两个有序数组合并,即得到有序数组[1,2,3,4,5].

weixin_46121540的博客 2989

平台跳跃游戏中的自动寻路,与地图导航扩展

平台游戏:主要的游戏方式是在2D平面上使用各种方式在悬浮平台上进行移动和穿过各种障碍。 现如的平台游戏中的平台特性与种类是很多的,像马里奥(FC)的单向支撑不可穿透的,或魂斗罗(FC)单向支撑可穿透的… \ 超级玛丽 魂斗罗 空洞骑士 蔚蓝 本博文 支撑 上 上 上 左、上、右 上 穿透 无 上、下 无 上(部分) 上下 所以本文主要以向上支撑并上下穿透的平台特性来进行实现 需求分析 在关卡设计后,地形的数据需要自动识别 地形中的平台可上下穿透移动,并可向上站立 平台的移动路..

MOV的博客 3062

常见的几种排序方法--javascript版

目录 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 冒泡排序 选择排序(Selection sort) 插入排序(英语:Insertion Sort) 快速排序 5.扩展思考 6.参考文献 7.更多讨论   1.背景介绍 在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法。 最常用...

不二的博客 601

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

Tailscale 自建 DERP 中继服务器

Tailscale自建DERP中继服务器

Accompagner的博客 4322

十大常见排序方法

数据结构十大排序 排序可分为稳定排序和非稳定排序(如果aaa在bbb的前面,且a=ba=ba=b,当我们通过某种排序方法进行排序之后,aaa仍然在bbb的前面,这种排序方法就是稳定的,否则就是不稳定的),排序也可以分为原地排序和非原地排序(如果一个排序方法额外申请了一个内存空间,这种排序就是非原地排序,否则就是原地排序),衡量一个排序方法的好坏可以根据其时间复杂度和空间复杂度来综合考虑。 稳定排序 我们先介绍三种稳定排序:冒泡排序,插入排序,归并排序 一、冒泡排序 冒泡排序的思想:每次比较相邻的两个元素,如

weixin_48369706的博客 3388

Python图像处理之光斑分析

光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。

微小冷的学习笔记 2855

常见排序方法 <十种排序方法>

5、对于一个每个元素都完全相同的一个序列来讲,快速排序也会退化到 O(n^2)。重复地遍历数组,每次比较相邻的两个数,如果它们的顺序不对,就交换它们的位置。4、快速排序在处理小规模数据时的表现不好,这个时候可以改用插入排序。2、使用左端,右端和中心的中值做为枢轴元。3、每次选取数据集中的中位数做枢轴。1、选取随机数作为枢轴。

kashine的博客 5353

Wi-Fi数据帧类别

QoS

1042484520@qq.com(邮箱) 3156

推荐一个直接用于项目开发的PID库!很好用,很稳定

关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9022

基于C++的几种常见排序方法

一些基于C++的排序算法,,

ly1012_的博客 710

贝叶斯地理统计模型R-INLA-1

贝叶斯地理统计模型R-INLA-1

学习中 2426

几种常见的内部排序方法

常见内部排序总结 一、基本排序概念 1.1、排序:就是将一个元素的任意序列重新排成一个按关键字有序的序列。 1.2、稳定性:如果待排序表中有两个元素Ri、Rj,其对应关键字为Ki=Kj,且排序前Ri在Rj之前,如果使用某一排序算法后,Ri仍在Rj前面,则称这个排序方法是稳定的,否则称之为不稳定排序。 1.3、内部排序:排序期间,元素全部存放在内存中的排序。 1.4、外部排序:排序期间,元

木瓜鹏的专栏 1896

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

几种常见的排序方法

最近两天看了一些排序的方法,顺带整理了下,便于理清思路: 由于数据存储的位置的原因,有的排序工作能在主存中完成,而有些不能,所以计算机中的排序(sorting)可以分为内部排序(internal sorting)和外部排序(external sorting),这里主要介绍几种内部排序方法。 内部排序: 1插入排序(insertion sort),这是最简单的排序算法之一。对...

weixin_30596165的博客 144

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中常见的几种数组排序方法

这篇文章总结一下我学习到的几种常见的数组排序方法,包括冒泡排序、插入排序、快速排序等等

weixin_61930152的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

几种常见的排序方法整理

几种常见的排序方法整理 一、直接插入排序 插入排序是一种简单直观的排序算法。通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在从后向前扫描的过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 算法: 将需要排序的数列看成一个数组,i初始化指向数组1号下标,j初始化指向数组0号下标,和i对应数值进行比较,比较一次往后退一步,如果j对应数值大于i对应数值,数值进行交换,直到i前面的数字都比它小,i往后走。 时间复杂度:(1)最坏情况是O(n^2) (2)

wang131415926的博客 9913

几种常见的排序方法总结

基本排序学习 文章目录基本排序学习冒泡排序算法原理图示代码实现时间复杂度算法稳定性代码优化插入排序算法原理图示代码实现时间复杂度算法稳定性快速排序算法原理图示代码实现时间复杂度算法稳定性选择排序算法原理图示代码实现时间复杂度希尔排序算法原理图示代码实现时间复杂度归并排序算法原理图示代码实现时间复杂度 冒泡排序 算法原理 对于一组包含n个数据的记录,冒泡排序在最坏的情况下需要进行n-1趟排序 第1...

qq_36536451的博客 510

Java实现几种常见排序方法

原地址为:Java常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、归并排序、二分排序、堆排序、计数排序等。 以下常见算法的定义 1. 插入排序:插入排序基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入排序的基本思...

weixin_34072857的博客 102

JAVA中几种常见的排序方法

* 选择排序&lt;br/&gt; * &lt;li&gt;在未排序序列中找到最小元素,存放到排序序列的起始位置&lt;/li&gt; * &lt;li&gt;再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。&lt;/li&gt; * &lt;li&gt;以此类推,直到所有元素均排序完毕。&lt;/li&gt; * * @param number

ZouJiaBao的博客 267
上一篇: Java学到什么程度才能叫精通?
下一篇: jvm如何运行以及内存如何分配
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值