当前位置:网站首页 > 区块链基础 > 正文

单链表实现排序(单链表的排序)



1.冒泡排序

基本思想:   

        把第一个元素与第二个元素比较,如果第一个比第二个大,则交换他们的位置。接着继续比较第二个与第三个元素,如果第二个比第三个大,则交换他们的位置…   我们对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样一趟比较交换下来之后,排在最右的元素就会 是最大的数。除去最右的元素,我们对剩余的元素做同样的工作,如此重复下去,直到排序完成。

具体步骤:   

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。   

2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。   

3.针对所有的元素重复以上的步骤,除了最后一个。   

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

时间复杂度:O(N2)

空间复杂度:O(1)

稳定排序:是

原地排序:是

 
  
2.快速排序

基本思想   

        我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边, 所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴 元素的位置。   从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素 左边的数组和右边的数组也重复同样的操作,直到数组的大小为1,此时每个元素都处于有序的位置。

具体步骤:   

1.从数列中挑出一个元素,称为 “基准”(pivot);   

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;   

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

时间复杂度:O(NlogN)

空间复杂度:O(logN)

稳定排序:否

原地排序:是

 
  
3.插入排序

基本思想:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。

具体步骤:   

1.将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列; 

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;   

3.如果该元素(已排序)大于新元素,将该元素移到下一位置;   

4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;   

5.将新元素插入到该位置后;   

6.重复步骤2~5。

时间复杂度:O(N2)

空间复杂度:O(1)

稳定排序:是

原地排序:是

 
  
4.选择排序

基本思想

        首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序。

具体步骤:   

1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。   

2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。   

3.重复第二步,直到所有元素均排序完毕。

时间复杂度:O(N2)

空间复杂度:O(1)

稳定排序:否

原地排序:是

 
  
5.归并排序

基本思想

        归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自下而上的迭代;

具体步骤:   

1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;   

2.设定两个指针,最初位置分别为两个已经排序序列的起始位置;   

3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;   

4.重复步骤 3 直到某一指针达到序列尾;   

5.将另一序列剩下的所有元素直接复制到合并序列尾。

时间复杂度:O(NlogN)

空间复杂度:O(N)

稳定排序:是

原地排序:否

 
  

到此这篇单链表实现排序(单链表的排序)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ipv6单播地址类型(ipv6地址类型包括本地链路单播地址)2025-11-20 07:00:10
  • 对于有头指针和尾指针的单向链表(对于一个头指针为head的带头结点)2025-11-20 07:00:10
  • 单向链表和双向链表区别(单向链表和双向链表区别在哪)2025-11-20 07:00:10
  • 单向链表逆置(实现单链表上的逆置运算)2025-11-20 07:00:10
  • 跳转链接怎么防红包提醒(链接跳转怎么设置)2025-11-20 07:00:10
  • 单向链表逆序输出 算法(单向链表逆序输出 算法实验报告)2025-11-20 07:00:10
  • 怎么点击图片跳转链接(点击图片跳转链接软件叫什么)2025-11-20 07:00:10
  • 带头尾指针的单链表(带头尾指针的单链表是什么)2025-11-20 07:00:10
  • 单向链表(单向链表和双向链表区别)2025-11-20 07:00:10
  • 腾讯文档怎么跳转链接文件(腾讯文档怎么设置链接)2025-11-20 07:00:10
  • 全屏图片