原地排序算法有哪些

作者&投稿:徐迹 (若有异议请与网页底部的电邮联系)
~

原地排序算法有:希尔排序、冒泡排序、插入排序、选择排序、堆排序、快速排序。

原地排序就是指不申请多余的空间来进行的排序,就是在原来的排序数据中比较和交换的排序。例如堆排序等都是原地排序,合并排序(根据TAOCP,合并排序也有原地排序的版本),计数排序等不是原地排序。例如快速排序,堆排序等都是原地排序,合并排序,计数排序等不是原地排序。

如果两个数相同,对他们进行的排序结果为他们的相对顺序不变。例如A={1,2,1,2,1}这里排序之后是A={1,1,1,2,2}稳定就是排序后第一个1就是排序前的第一个1,第二个1就是排序前第二个1,第三个1就是排序前的第三个1。同理2也是一样。不稳定就是他们的顺序与开始顺序不一致。

算法的分类

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

总体上说,排序算法有两种设计思路,一种是基于比较,另一种不是基于比较。《算法导论》一书给出了这样一个证明:“基于比较的算法的最优时间复杂度是O(NlgN)”。对于基于比较的算法,有三种设计思路,分别为:插入排序,交换排序和选择排序。

非基于比较的排序算法时间复杂度为O(lgN),之所以复杂度如此低,是因为它们一般对排序数据有特殊要求。如计数排序要求数据范围不会太大,基数排序要求数据可以分解成多个属性等。

以上内容参考:百度百科-原地排序




数据结构 java开发中常用的排序算法有哪些
排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序—...

搜索引擎的排序算法都有哪些是怎么实现的
这样,减少了用户检索时需要的排序时间,极大地降低了查询响应时间。但是PageRank存在两个缺陷:首先PageRank算法严重歧视新加入的网页,因为新的网页的出链接和入链接通常都很少,PageRank值非常低。另外PageRank算法仅仅依靠外部链接数量和重要度来进行排名,而忽略了页面的主题相关性,以至于一些主题不相关的网页(如广告页面)...

稳定的排序算法有哪些?
1.稳定的排序 冒泡排序(bubble sort) — O(n2)鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2)插入排序 (insertion sort)— O(n2)桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体 计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体 归并排序 (...

排序算法有哪些?
否则,不要交换。(2)气泡排序:交换和重复两个相邻数字的过程。一般来说,如果有n个数字要排序,则需要n-1起泡。(3)选择排序:在交换顺序的基础上,找出剩余数量的最大值,并与地面上的I+1数量进行交换,使得每轮比较中只有一次交换操作,该算法最多只有n-1个交换操作。

常用的排序算法有哪些
排序另一种分法 外排序:需要在内外存之间多次交换数据才能进行 内排序:归并排序 冒泡排序 快速排序 简单选择排序 堆排序 直接插入排序 希尔排序 插入类排序 选择类排序 交换类排序 归并类排序

常见的几种排序算法总结
排序算法大体可分为两种:一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等 冒泡排序它重复地走访过要排序的元素,一次比较相邻两个元素,...

程序员实用算法有哪些推荐算法一:快速排序算法
算法一: 快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要O(nlog n)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(n log n) 算法更快,因为它的内部循环 (inner loop)可以在大部分的架构上很有效率地...

常见的排序算法哪个效率最高?
快速排序法。Java的排序算法有哪些?java的排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序:1.插入排序:直接插入排序、二分法插入排序、希尔排序。2.选择排序:简单选择排序、堆排序...

数据结构的排序算法中,哪些排序是稳定的,哪些排序是不稳定的?_百度知 ...
基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。1.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法...

你了解哪些排序算法? 请说明
面试时最基本的排序算法

祁阳县18644087768: java排序算法有多少种 -
凌超托安: 算法和语言无关吧,语言只是把具体的算法实现出来而已.据我了解的排序算法11-13种.排序算法嘛 主要就是个思想而已.不同的算法时间复杂度不一样,空间复杂度也不一样,当然执行的效率也不一样.当然采用哪种算法还取决于你要实现...

祁阳县18644087768: 排序算法的排序算法 -
凌超托安: 排序的算法有很多,对空间的要求及其时间效率也不尽相同.下面列出了一些常见的排序算法.这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求稍高...

祁阳县18644087768: 将整数数组按照堆排序的方式原地进行升序排列,请问在整个排序过程 -
凌超托安: 就是排序算法,可以考虑的算法包括:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、桶排序等.提供一个冒泡排序吧,其他的建议自己实现: <pre t="code" l="cpp">typedef int DT; void swap(DT* a, DT* ...

祁阳县18644087768: 除了经典和常用的排序算法外,还有哪些奇葩而有趣的排序算法 -
凌超托安: 排序算法有:冒泡排序(bubble sort) — O(n^2) 鸡尾酒排序(Cocktail sort,双向的冒泡排序) — O(n^2) 插入排序(insertion sort)— O(n^2) 桶排序(bucket sort)— O(n); 需要 O(k) 额外空间 计数排序(counting sort) — O(n+k); 需要 O(n+...

祁阳县18644087768: 排序算法最快的是哪种说说原理,哪些是不用申请额外空间的 -
凌超托安: 没有哪一种永远最快,要看场合,也要看这个最快是哪个指标,并且要考虑数据的规模,还要看是否稳定,有时存储结构同样不能排除 至于不用申请额外空间的,只要是原地排序的都是,比如: 直接插入,希尔排序,冒泡排序、直接选择排序、堆排序等

祁阳县18644087768: Java的排序算法有哪些 -
凌超托安: java的排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 1.插入排序:直接插入排序、二分法插入排序、希尔排序. 2.选择排序:简单选择排序、堆排序. 3.交换排序:冒泡排序、快速排序. 4.归并排序 5.基数排序

祁阳县18644087768: 原地排序法是指 - ------. -
凌超托安: 选C原地排序就是指不申请多余的空间来进行的排序,就是在原来的排序数据中比较和交换的排序.例如快速排序,堆排序等都是原地排序,合并排序,计数排序等不是原地排序.

祁阳县18644087768: 什么是冒泡排序法? -
凌超托安: 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法...

祁阳县18644087768: 请教外部排序问题. -
凌超托安: 外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并.[1][2]比如,要对 900 MB 的数据进行排序,但...

祁阳县18644087768: 线性表如何输入 -
凌超托安: #include <stdlib.h> #include <iostream.h> #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct //顺序表的定义 { DataType data[ListSize...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网