-
常见的几种排序方法
2019-06-01 09:34:54【常见的几种排序方法】 1.背景介绍 在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法。 最常用到的排序方式是数值顺序以及字典顺序。有效的...【常见的几种排序方法】
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 排序算法汇总
-
【二级java】排序技术
2019-09-10 19:53:58例题2 : 在下列几种排序方法中,要求内存量最大的是 解析: 快速排序的基本思想:通过一次排序将待排序记录分成两部分,其中一部分记录的关键字均比另一部分关键字少,在分别对这两部分记录继续进行排序,以达到...例题1 :希尔排序属于下列哪种排序法
解析:
希尔排序法的基本思想是: 将整个无序序列分割成若干小的子序列分别进行插入排序,所以属于插入排序
例题2 : 在下列几种排序方法中,要求内存量最大的是
解析:
快速排序的基本思想:通过一次排序将待排序记录分成两部分,其中一部分记录的关键字均比另一部分关键字少,在分别对这两部分记录继续进行排序,以达到整个序列有序
插入排序的基本思想:将无序序列中各种元素依次插入到已有的线性表中,从而得到一个新的序列
选择排序的基本思想是: 扫描整个线性表,从中选出最小的元素,交换到表的最前面,依次进行该操作,直到表空为止
归并排序的基本思想是: 将两个或两个以上的有序表组合成一个新的有序表
例题3:已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是
解析: 在待排序序列基本有序的情况下,采用插入排序所用的时间最少
例题4 : 对于长度为n的线性表,在最坏情况下,冒泡排序、快速排序、直接插入排序、堆排序、希尔排序对应的比较次数为
解析:
冒泡、快速、直接插入排序对应的比较次数都为n(n-1)/2,堆排序需要的比较次数为nlog2n(2为底数)的最小整数,希尔排序为
-
关键字初始次序与排序算法之间影响
2018-06-25 20:28:361.元素的移动次数与关键字的初始排列次序无关的是:基数排序。2.元素的比较次数与初始序列无关是:选择排序。...6.下列几种排序方法中,空间复杂度最高的是(归并排序) 快排、插入排序、选择排序、归并。 ...1.元素的移动次数与关键字的初始排列次序无关的是:基数排序。2.元素的比较次数与初始序列无关是:选择排序。解释:选择排序每一趟都从待排序的数据元素中选出最小的或者最大的一个元素。3.算法的时间复杂度与初始序列无关的是:直接选择排序。4.选择排序一定是n-1趟排序,比较的次数永远是n(n-1)/2。5.冒泡排序最少一趟,最多n-1;比较次数最少n-1,最多n(n-1)/2。6.下列几种排序方法中,空间复杂度最高的是(归并排序)快排、插入排序、选择排序、归并。分析:快速、插入、选择都是o(1),归并排序是o(n),因为他在合并两个排好序的子序列的过程中需要新的空间来存储数据 -
-
sqlserver慕课_SQLServer数据库(市慕课)答案试题题目及答案,期末考试题库,章节测验答案...
2021-01-17 17:00:22The order of athletic events at the ancient Olympics ______.A.has not definitely been esta当...第一个添加在下列几种排序方法中,要求内存量最大的是______。A.插入排序B.选择排序C.快速排序D.归并排序Ho...The order of athletic events at the ancient Olympics ______.A.has not definitely been esta
当一个工程含有多个窗体时,其中的启动窗体是______。A.启动Visual Basic时建立的窗体B.第一个添加
在下列几种排序方法中,要求内存量最大的是______。A.插入排序B.选择排序C.快速排序D.归并排序
How did environmentalists manage to protect dolphins?A.They prevented fishermen from selli
视图设计一般有3种设计次序,下列不属于视图设计的是______。A.自顶向下B.由外向内C.由内向外D.自
The idea that, if your house is built in the right position, this may affect your success
Part ADirections: Read the following four texts. Answer the questions below each text by c
在数据流图(DFD)中,带有名字的箭头表示______。A.控制程序的执行顺序B.模块之间的调用关系C.数据
The story of Milton Glaser shows that ______.A.colors are not important in geomancyB.geoma
在下列几种排序方法中,要求内存量最大的是______。A.插入排序B.选择排序C.快速排序D.归并排序
下列不属于软件调试技术的是______。A.强行排错法B.集成测试法C.回溯法D.原因排除法
在窗体上面画一个名称为TxtA的文本框,然后编写如下的事件过程:Private Sub TxtA___KeyPress(Keya
下列程序段的执行结果为______。For x=5 To 1 Step-1For Y=1 To 6-xPrint Tab(Y+5);"*";Next YPri
执行如下语句:a=InputBox("Today","Tomorrow","Yesterday",,,"Day before yesterday",5)将显示一
视图设计一般有3种设计次序,下列不属于视图设计的是______。A.自顶向下B.由外向内C.由内向外D.自
决定一个窗体有无控制菜单的属性是______。A.MinButtomB.CaptionC.MaxButtonD.ControlBox
Modern athletes' results cannot be compared with those of ancient runners because ______.A
The story of Milton Glaser shows that ______.A.colors are not important in geomancyB.geoma
在窗体上面画一个名称为TxtA的文本框,然后编写如下的事件过程:Private Sub TxtA___KeyPress(Keya
决定控件上文字的字体、字形、大小、效果的属性是______。A.TextB.CaptionC.NameD.Font
A.rule offB.rule outC.rule overD.rule of
SQL语言又称为______。A.结构化定义语言B.结构化控制语言C.结构化查询语言D.结构化操纵语言
What is the author's attitude in this passage?A.Explanatory.B.Persuasive.C.Humorous.D.Narr
决定一个窗体有无控制菜单的属性是______。A.MinButtomB.CaptionC.MaxButtonD.ControlBox
在程序代码中将图片文件mypic.jpg装入图片框Picture1的语句是______。A.Picture1.Picture="mypic.
-
堆排序和归并排序
2017-08-15 11:05:57堆排序与快速排序,归并排序一样都是时间复杂度为O(n*logn)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的堆。 堆的定义:n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。... -
PHP 数组排序
2021-01-16 21:59:29我们在使用 PHP 数组的过程中,有时候需要对 PHP 数组进行排序,本节就介绍了 PHP 数组的几种排序方法。 数组中的元素可以按字母或数字顺序进行降序或升序排列。 PHP - 数组排序函数 在本章中,我们将一一介绍下列 ... -
Java实现堆排序
2019-03-29 11:14:13堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为... -
智慧树题库免费答案python_智慧树_Python语言应用_完整免费答案
2021-01-14 12:32:12【单选题】设顺序表的长度为16,对该表进行简单插入排序。...【单选题】啤酒坊的基础设施不包括:在下列几种排序方法中,要求内存量最大的是( )【简答题】3 、为什么不直接测定市售浓度大的双氧水?... -
堆:堆与堆排序
2019-09-27 22:04:36堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。 堆排序是就地排序,辅助空间为O(1)。 它是不稳定的排序方法。(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话... -
堆排序时间复杂度_图解堆结构、堆排序及堆的应用
2020-12-10 09:30:11前言这次我们介绍另一种时间复杂度为 O(nlogn) 的选择类排序方法叫做堆排序。我将从以下几个方面介绍:堆的结构堆排序优化的堆排序原地堆排序堆的应用堆的结构什么是堆?我给出了百度的定义,如下:堆(Heap)是计算机... -
七大排序算法之改进算法系列(五)——堆排序
2019-03-14 21:50:19堆排序(Heap Sort):就是利用堆(假设利用大顶堆)进行排序的方法。 堆排序可以看成是简单选择排序的一种升级版本。 为了弄清楚堆排序,首先来学习几个概念,分别是堆、大顶堆、小顶堆 堆是具有下列性质的完全... -
堆与堆排序
2014-02-22 22:44:43堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。 先说说什么是堆,堆通常是一个可以被看做一棵树的数组对象。满足下列性质: 1.堆中某个节点的值总是不大于或不小于其父节点的值; ... -
-
计算机二级C语言考试题预测
2010-06-08 18:29:34(54) 在下列几种排序方法中,要求内存量最大的是(D) 注:要牢记,书中没有提到。 A. 插入排序 B. 选择排序 C. 快速排序 D. 归并排序 (55) 在设计程序时,应采纳的原则之一是(A) 注:和设计风格有关 A. 程序结构应有... -
二级C语言公共基础知识
2009-11-20 11:26:03(31) 算法一般都可以用哪几种控制结构组合而成______。(D) A. 循环、分支、递归 B. 顺序、循环、嵌套 C. 循环、递归、选择 D. 顺序、选择、循环 (32) 数据的存储结构是指______。(B) A. 数据所占的存储空间量 B. ... -
Java实现---堆排序 Heap Sort
2016-07-20 21:09:00堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为... -
-
-
-
-
数据结构_练习题 10.3.doc
2020-11-10 18:53:41练习题及参考答案 选择题 1下述几种排序方法中平均查找长度最小的是 A插入排序 B选择排序 C快速排序 D归并排序 2设关键字序列为3769714520对其进行排序的最小交换次数是 A6 B7 C8 D20 3将5个不同的数据进行排序至少... -
-
-
算法题 【含答案和解析】
2021-03-08 21:39:411. 就平均查找速度而言,下列几种查找速度从慢至快的关系是 A顺序 折半 哈希 分块 B顺序 分块 折半 哈希 C分块 折半 哈希 顺序 D顺序 哈希 分块 折半 2. 采用深度优先搜索或拓扑排序算法可以判断出一个有向图中... -
优点队列(堆)
2020-08-17 15:59:54有几种明显的方法实现优先队列。我们可以使用一个简单链表在表头以O(1)执行插入操作,并且遍历该链表以删除最小元,但是这需要O(N)时间。另一种方法是,始种让链表保持排序状态,这使得插入代价高昂O(N),而del -
Oracle9i的init.ora参数中文说明
2008-11-07 20:14:11说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 TIMESTAMP 数据类型的默认值, 该数据类型既存储YEAR, MONTH 和 DAY 这几个日期值, 也存储 HOUR, MINUTE 和 SECOND 这几个时间值。 语法: TIMESTAMP '1997-01-31 ... -
第1期
2016-10-10 09:18:111、让一个物体围绕某一点旋转,有几种方法?分别是什么? 2、Mesh,Sphere,Box,Capsule,四种碰撞器。请按照性能开销由小到大进行排序。 3、向量的点积,叉积,在游戏中的应用(分别举一个例子说明)。 4、请复制下列...