排序

本文详细介绍了几种常见的排序算法,包括选择排序、冒泡排序、插入排序、归并排序、快速排序、堆排序和希尔排序。每种算法的原理、时间复杂度和优缺点都有所阐述,其中快速排序在平均情况下的时间复杂度为nlogn,而希尔排序通过跳跃分割策略改进了直接插入排序的时间效率。
摘要由CSDN通过智能技术生成

排序

选择排序

选择排序开始的时候,我们扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素放到它在有序表中的最终位置上。然后我们从第二个元素开始扫描列表,找到最后n-1个元素中的最小元素,再和第二个元素交换位置,把第二小的元素放在它的最终位置上。
不稳定的!

时 间 复 杂 度 : n 2 , 交 换 次 数 : n 时间复杂度:n^2,交换次数:n n2,n

冒泡排序

蛮力法在排序问题上还有另一个应用,它比较表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复多次以后,最终,最大的元素就“沉到”列表的最后一个位置。第二遍操作将第二大的元素沉下去。

时 间 复 杂 度 : n 2 , 交 换 次 数 : n 2 时间复杂度:n^2,交换次数:n^2 n2,n2

插入排序

一般来说,我们可以从右到左扫描这个有序的子数组,直到遇到第一个小于等于Am-1]的元素,然后把A[mー1]插在该元素的后面。这种算法被称为直接插入排序( straight insertion sort),或者简称为插入排序(insertion sort)。
图4.4是该算法的操作图示。
89|45 68 90 29 34 17
45 89|68 90 29 34 17
图4.4用插入排序法进行排序的例子。一条竖线把输入的有序部分和剩下的元素分开正在插入的元素用粗体字表示

时 间 复 杂 度 : n 2 , 交 换 次 数 : n 时间复杂度:n^2,交换次数:n n2,n

归并排序

合并排序是成功应用分治技术的一个完美例子。对于一个需要排序的数组A[0.n-1]合并排序把它一分为二:A[0…(n/2)-1]和A[(n/2)…n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组。

时 间 复 杂 度 : n l o g n 时间复杂度:nlogn nlogn

快速排序

快速排序是另一种基于分治技术的重要排序算法。不像合并排序是按照元素在数组中的位置对它们进行划分,快速排序按照元素的值对它们进行划分。我们在4.5节中讨论选择问题时介绍过数组划分的思想了。划分是对给定数组中的元素的重新排列,使得A[s]左边的元素都小于等于A[s],而所有A[s]右边的元素都大于等于A[s].
显然,建立了一个划分以后,A[j]已经位于它在有序数组中的最终位置,接下来我们可以继续对A[s]前和A[S]后的子数组分别进行排序(例如,使用同样的方法)。注意,它与合并排序的不同之处在于:在合并排序算法中,将问题划分成两个子问题是很快的,算法的主要工作在于合并子问题的解:而在快速排序中,算法的主要工作在于划分阶段,而不需要再去合并子问题的解了。
有序退化成冒泡排序。

时 间 复 杂 度 : n l o g n , 最 差 n 2 时间复杂度:nlogn,最差n^2 nlogn,n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值