选择排序,快速排序,冒泡排序,堆排序,插入排序,基排序的程序的运行速度
冒泡排序,插入排序,归并排序,基数排序是稳定的排序。快速排序,选择排序,堆排序,希尔排序是不稳定的排序。
冒泡排序,插入排序,选择排序的时间复杂度是O(n^2),归并排序,堆排序,快速排序的时间复杂度都是O(n*log(n)),空间复杂度冒泡排序,插入排序,选择排序都是O(1),归并排序为O(n)。
快速排序不稳定,不过最为常用吧,我是搞ACM的这个在比赛中最常用,我只用这个,基本上没能卡得住的。效率又高
分析如下:冒泡排序:在最优情况下只需要经过n-1次比较即可得出结果,(这个最优情况那就是序列己是正序,从100K的正序结果可以看出结果正是如此),但在最坏情况下,即倒序(或一个较小值在最后),下沉算法将需要n(n-1)/2次比较。所以一般情况下,特别是在逆序时,它很不理想。它是对数据有序性非常敏感的排序算法。
冒泡排序2:它是冒泡排序的改良(一次下沉再一次上浮),最优情况和最坏情况与冒泡排序差不多,但是一般情况下它要好过冒泡排序,它一次下沉,再一次上浮,这样避免了因一个数的逆序,而造成巨大的比较。如(2,3,4,…,n-1,n,1),用冒泡排序需要n(n-1)/2次比较,而此排序只要3轮,共比较(n-1)+(n-2)+(n-3)次,第一轮1将上移一位,第二轮1将移到首位,第三轮将发现无数据交换,序列有序而结束。但它同样是一个对数据有序性非常敏感的排序算法,只适合于数据基本有序的排序。
快速排序:它同样是冒泡排序的改进,它通过一次交换能消除多个逆序,这样可以减少逆序时所消耗的扫描和数据交换次数。在最优情况下,它的排序时间复杂度为O(nlog2n)。即每次划分序列时,能均匀分成两个子串。但最差情况下它的时间复杂度将是O(n^2)。即每次划分子串时,一串为空,另一串为m-1(程序中的100K正序和逆序就正是这样,如果程序中采用每次取序列中部数据作为划分点,那将在正序和逆时达到最优)。从100K中正序的结果上看“快速排序”会比“冒泡排序”更慢,这主要是“冒泡排序”中采用了提前结束排序的方法。有的书上这解释“快速排序”,在理论上讲,如果每次能均匀划分序列,它将是最快的排序算法,因此称它作快速排序。虽然很难均匀划分序列,但就平均性能而言,它仍是基于关键字比较的内部排序算法中速度最快者。
直接选择排序:简单的选择排序,它的比较次数一定:n(n-1)/2。也因此无论在序列何种情况下,它都不会有优秀的表现(从上100K的正序和反序数据可以发现它耗时相差不多,相差的只是数据移动时间),可见对数据的有序性不敏感。它虽然比较次数多,但它的数据交换量却很少。所以我们将发现它在一般情况下将快于冒泡排序。
堆排序:由于它在直接选择排序的基础上利用了比较结果形成。效率提高很大。它完成排序的总比较次数为O(nlog2n)。它是对数据的有序性不敏感的一种算法。但堆排序将需要做两个步骤:-是建堆,二是排序(调整堆)。所以一般在小规模的序列中不合适,但对于较大的序列,将表现出优越的性能。
直接插入排序:简单的插入排序,每次比较后最多移掉一个逆序,因此与冒泡排序的效率相同。但它在速度上还是要高点,这是因为在冒泡排序下是进行值交换,而在插入排序下是值移动,所以直接插入排序将要优于冒泡排序。直接插入法也是一种对数据的有序性非常敏感的一种算法。在有序情况下只需要经过n-1次比较,在最坏情况下,将需要n(n-1)/2次比较。
希尔排序:增量的选择将影响希尔排序的效率。但是无论怎样选择增量,最后一定要使增量为1,进行一次直接插入排序。但它相对于直接插入排序,由于在子表中每进行一次比较,就可能移去整个经性表中的多个逆序,从而改善了整个排序性能。希尔排序算是一种基于插入排序的算法,所以对数据有序敏感。
归并排序:归并排序是一种非就地排序,将需要与待排序序列一样多的辅助空间。在使用它对两个己有序的序列归并,将有无比的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n)。对数据的有序性不敏感。若数据节点数据量大,那将不适合。但可改造成索引操作,效果将非常出色。
基数排序:在程序中采用的是以数值的十进制位分解,然后对空间采用一次性分配,因此它需要较多的辅助空间(10*n+10), (但我们可以进行其它分解,如以一个字节分解,空间采用链表将只需辅助空间n+256)。基数排序的时间是线性的(即O(n))。由此可见,基数排序非常吸引人,但它也不是就地排序,若节点数据量大时宜改为索引排序。但基数排序有个前提,要关键字能象整型、字符串这样能分解,若是浮点型那就不行了。
按平均时间将排序分为类:
(1) 平方阶(O(n2))排序
各类简单排序,例如直接插入、直接选择和冒泡排序;
(2) 线性对数阶(O(nlog2n))排序
如快速排序、堆排序和归并排序;
(3) O(n1+§))排序
§是介于0和1之间的常数。希尔排序便是一种;
(4) 线性阶(O(n))排序
本程序中的基数排序,此外还有桶、箱排序。
排序方法的选择
因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法很重要
(1)若n较小,可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好,它会比选择更少的比较次数;
但当记录规模较大时,因为直接选择移动的记录数少于直接插人,所以宜用选直接选择排序。
这两种都是稳定排序算法。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜(这里的随机是指基准取值的随机,原因见上的快速排序分析);这里快速排序算法将不稳定。
(3)若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序虽不会出现快速排序可能出现的最坏情况。但它需要建堆的过程。这两种排序都是不稳定的。
归并排序是稳定的排序算法,但它有一定数量的数据移动,所以我们可能过与插入排序组合,先获得一定长度的序列,然后再合并,在效率上将有所提高。
(4)特殊的箱排序、基数排序
它们都是一种稳定的排序算法,但有一定的局限性:
1、关键字可分解。
2、记录的关键字位数较少,如果密集更好
3、如果是数字时,最好是无符号的,否则将增加相应的映射复杂度,可先将其正负分开排序。
事实上各种排序方法个有优缺点适用于不同的场合:
排序(Sorting)
插入排序(insertion sort):直接插入排序 希尔排序(shell's sort)(缩小增量排序Diminishing increment sort)
交换排序:冒泡排序(bubble sort)快速排序(quick sort)
选择排序:直接选择排序(straight selection sort),堆排序;
归并排序(merge sort):
分配排序:箱排序(Bin sort),基数排序(radix sort)
更多的自己研究一下。
排序方法的选取主要考虑算法的性能与资源占用。也就是速度和占用的存储空间。
希望对你有所帮助!
要看时间复杂度罗。
O(n^2),O(n^2),O(n^2),O(nlog 2 n),O(nlog 2 n),O(nlog 2 n),
排序有哪些方法
插入排序在实现上通常使用in-place排序,需要用到O(n)级别的额外空间。在计算机科学中,插入排序是一种效率高且可靠的排序算法。对于小型数据或近乎有序的列表,插入排序的效率较高。但对于大型数据或随机列表,其他更复杂的排序算法如快速排序和归并排序可能更有效。四、快速排序 快速排序是运用分治法的原...
基于比较的排序算法
基于比较的排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序。1、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历待排序的元素,比较相邻的两个元素,如果它们的顺序错误,就交换它们的位置。这个过程会一直重复,直到没有需要交换的元素为止。冒泡排序的时间复杂度为O(n^2)...
排序方法有哪几种
1、排序方法有10种,分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。2、冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。这种方法主要是通过对相邻两个元素进行大小的比较,根据比较结果和算法规则对该二元素的位置进行交换,这样逐...
排序方法有哪几种
排序方法有:一、直接插入排序 原理:从待排序的数中选出一个来,插入到前面的合适位置。二、选择排序 与直接插入排序正好相反,选择排序是从待排序的数中选出最小的放在已经排好的后面,这个算法选数耗时。三、快速排序 快速排序简称快排,是一种比较快的排序,适合基本无序的数据,为什么这么说呢?...
排序有几种方法
快速排序的效率通常比冒泡排序高,尤其是在处理大量数据时。例如,对于列表[5, 3, 8, 4, 2],可以选择5作为基准元素,将列表分割为[3, 2]和[4, 8],然后分别对这两个子列表进行快速排序,最后合并结果得到[2, 3, 4, 5, 8]。此外,插入排序也是一种简单直观的排序方法。它的工作原理类似于...
快速排序法
快速排序是一种高效的排序方法,它的核心思想是通过分治策略将待排序序列分成两个子序列,然后对子序列分别排序,最终合并成有序序列。归并排序也是一种常用的排序方法,其思想是将待排序序列分成若干个子序列,分别排序,再将已排序的子序列合并成一个有序序列。除了上述几种排序方法外,还有一些其他的...
有哪些排序算法是稳定的?
1、快速排序:快速排序是一种基于分治思想的排序算法,通常通过选择一个枢纽元素并将数据分成两部分来实现排序。快速排序是不稳定的,因为在交换元素的过程中可能改变相等元素的相对顺序。2、堆排序:堆排序是一种基于二叉堆的排序算法,它不保证相等元素的相对顺序。在堆排序中,元素的交换可能导致相等元素...
计算机排序方法有哪些
一、常见的计算机排序方法 1. 冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。这个过程会不断重复,直到没有元素需要交换为止。2. 选择排序(Selection Sort)选择排序是一种简单直观的排序算法。它的工作原理是...
排序算法最快的是哪个
关于稳定性稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。名词解释:n:数据规模k:"桶"的个数In-place:占用常数内存,不占用额外内存Out-place:占用额外内存稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同包含以下内容...
常见的几种排序算法总结
排序算法大体可分为两种:一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等 冒泡排序它重复地走访过要排序的元素,一次比较相邻两个元素,...
移咬易孚: 选择,冒泡,快排,堆排,基数,计数,二叉树,插入,归并,希尔排序,等等..
永登县13486479270: 对序列1,2,3,4,5进行排序,用堆排序、快速排序、冒泡排序和归并排序进行排序,分别需要进行几趟排序 - ?
移咬易孚: 1、插入排序(直接插入排序和希尔排序) 2、选择排序(直接选择排序和堆排序) 3、交换排序(冒泡排序和快速排序) 4、归并排序 5、基数排序 直接插入排序:逐个将后一个数加到前面的排好的序中.在直接插入排序过程中,对其中一个记...
永登县13486479270: 数据结构的排序算法中,哪些排序是稳定的,哪些排序是不稳定的? - ?
移咬易孚: 快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法 基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法
永登县13486479270: 下列排序算法中,其中( )是稳定的. - ?
移咬易孚:[选项] A. 堆排序,冒泡排序 B. 快速排序,堆排序 C. 直接选择排序,归并排序 D. 归并排序,冒泡排序
永登县13486479270: 电脑对数据的排序有哪几种具体的方法? - ?
移咬易孚: 五大类方法:插入排序(直接插入排序、希尔排序等)、快速排序(冒泡排序、快速排序)、选择排序(简单选择排序、树形选择排序、堆排序)、归并排序、基数排序
永登县13486479270: Java的几种常见排序 - ?
移咬易孚: 快速排序法、冒泡法、选择排序法、插入排序法 1.快速排序:import java.util.Arrays; public class Test2{public static void main(String[] args){int[] a={5,4,2,4,9,1};Arrays.sort(a); //进行排序for(int i: a){System.out.print(i);}} } 2.冒泡排序 public ...
永登县13486479270: 一般来说,最快的排序算法是() - ?
移咬易孚:[选项] A. :归并排序 B. :快速排序 C. :插入排序 D. :希尔排序
永登县13486479270: 什么排序的速度(时间复杂度)最快? - ?
移咬易孚: 从时间复杂度看,所有内部排序方法可以分为两类.1.插入排序 选择排序 起泡排序 其时间复杂度为O(n2);2.堆排序 快速排序 归并排序 其时间复杂度为O(nlog2n).这是就平均情况而言的,如果从最好的情况考虑, 则插入排序和起泡排序的时间复杂度最好,为O(n), 而其他算法的最好情况同平均情况大致相同.如果从最坏的情况考虑,快速排序的时间复杂度为O(n2),插入排序和起泡排序虽然同平均情况相同,但系数大约增加一倍,运行速度降低一半,而选择排序、堆排序和归并排序则影响不大.总之, 在平均情况下,快速排序最快; 在最好情况下,插入排序和起泡排序最快; 在最坏情况下,堆排序和归并排序最快.
永登县13486479270: Java和C#一共有几种排序方法 - ?
移咬易孚: 排序方法一般都就那几种.像冒泡排序,直接插入排序,快速排序,简单选择排序,希尔排序,堆排序.其排序介绍自己看吧. 1、冒泡排序属于稳定排序,是一种借助“交换”进行排序的方法.首先要将第一个记录的关键字和第二...
永登县13486479270: 谁能给我几种排序的具体算法(直接插入,折半插入,冒泡,简单选择,快速,堆,归并排序) - ?
移咬易孚: 直接插入排序 说明:逐个将后一个数加到前面的排好的序中.在直接插入排序过程中,对其中一个记录的插入排序称为一次排序;直接插入排序是从第二个记录开始进行的,因此,长度为n的记录序列需要进行n-1次排序才能完成整...