常见排序算法及对应的时间复杂度和空间复杂度

  • 时间:
  • 浏览:1

基本思想:每步将另一一一十个 待排序的记录,按其顺序码大小插入到前面那我排序的字序列的为宜位置(从后向前找到为宜位置后),直到删改插入排序完为止。

实例

java实现

基本思想:选择另一一一十个 基准元素,通常选择第另一一一十个 元素那我最后另一一一十个 元素,通过一趟扫描,将待排序列分成两帕累托图,一帕累托图比基准元素小,一帕累托图大于等于基准元素,此时基准元素在其排好序后的正确位置,如果 再用同样的方法递归地排序划分的两帕累托图。

实例:

[TOC]

1、插入排序

1.1直接插入排序(从后向前找到为宜位置后插入)

1.2 二分法插入排序

1.3 希尔排序

2、选择排序

2.1 直接选择排序

2.2 堆排序

3、交换排序

3.1 冒泡排序

3.2快速排序

4、 归并排序

5、基数排序

堆的定义下:具有n个元素的序列 (h1,h2,…,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,…,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义还并能看出,堆顶元素(即第另一一一十个 元素)必为最大项(大顶堆)。删改二叉树还并能很直观地表示堆的形态。堆顶为根,其它为左子树、右子树。

image.png

:

基本思想:二分法插入排序的思想和直接插入一样,如果 找为宜的插入位置的方法不同,这里是按二分法找到为宜的位置,还并能减少比较的次数。

实例:

image.png

文章参考:https://blog.csdn.net/gane_cheng/article/details/52652705

交换,从堆中踢出最大数:

image.png

image.png

:

image.png

image.png

基本思想:先取另一一一十个 小于n的整数d1作为第另一一一十个 增量,把文件的删改记录分成d另一一一十个 组。所有距离为d1的倍数的记录放到同另一一一十个 组中。先在各组内进行直接插入排序;如果 ,取第十个 增量d2

java代码:

图片

排序大的分类还并能分为并不是:内排序和外排序。在排序过程中,删改记录存放到内存,则称为内排序,那我排序过程中须要使用外存,则称为外排序。下面讲的排序就有属于内排序。

image.png

image.png

java实现

基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。如果 ,从最低位结束,依次进行一次排序。那我从最低位排序一个劲到最高位排序完成那我,数列就变成另一一一十个 有序序列。

实例

image.png

内排序有还并能分为以下几类:

  (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。

  (2)、选择排序:直接选择排序、堆排序。

  (3)、交换排序:冒泡排序、快速排序。

  (4)、归并排序

  (5)、基数排序

基本思想:归并(Merge)排序法是将另一一一十个 (或另一一一十个 以上)有序表合并成另一一一十个 新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。如果 再把有序子序列合并为整体有序序列。

实例

排序算法经过了很长时间的演变,产生了如果 种不同的方法。对于初学者来说,对它们进行架构设计 便于理解记忆显得怪怪的要。帕累托图算法就有它特定的使用场合,先要通用。如果 ,大伙儿很有必要对所有常见的排序算法进行归纳。

:

image.png

思想:初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为另一一一十个 堆,这时堆的根节点的数最大。如果 将根节点与堆的最后另一一一十个 节点交换。如果 对前面(n-1)个数重新调整使之成为堆。依此类推,直到并能另一一一十个 节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序须要另一一一十个 过程,一是建立堆,二是堆顶与堆的最后另一一一十个 元素交换位置。如果 堆排序有另一一一十个 函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

实例

初始序列:46,79,56,38,40,84

建堆:

基本思想:在要排序的一组数中,选出最小的另一一一十个 数与第另一一一十个 位置的数交换;如果 在剩下的数当中再找最小的与第十个 位置的数交换,并能循环到倒数第十个 数和最后另一一一十个 数比较为止。

实例:

基本思想:在要排序的一组数中,对当前还未排好序的范围内的删改数,自上而下对相邻的另一一一十个 数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

实例

基本思想:

堆排序是并不是树形选择排序,是对直接选择排序的有效改进。