数据结构-排序

1.这种专门研究应用程序中数据之间逻辑关系、存储方式及其操作的学问就是数据结构。

2.基本逻辑结构:集合 线性关系 树形关系 图形关系

3.物理存储结构:顺序存储结构、非顺序存储结构

4.算法的设计取决于逻辑结构,算法的实现依赖于存储结构

5.线性表:用于存储相似结构的数据

    分为顺序存储结构和链式存储结构;可以进行插入删除和排序的操作;

6.栈:只能在一端进行插入删除的操作;

允许进行插入、删除操作的一端为栈顶top,另一端为栈底bottom;进栈出栈;先进后出;顺序栈和链式栈

7.队列:使用一端来插入数据一端来删除数据

    先进先出;顺序队列和链式队列;

8.衡量排序算法的优劣:时间复杂度、空间复杂度、稳定性

9.排序算法分类:内部排序和外部排序

直接选择排序、堆排序、冒泡排序、快速排序、直接插入排序、折半插入排序、shell排序、归并排序、桶式排序、基数排序


直接选择排序:

算法时间效率为O(n2),空间效率为O(1),算法不稳定


堆排序

算法的时间效率,空间效率O(1),算法不稳定


冒泡排序

相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。

算法的时间效率:从冒泡排序的算法可以看出,若待排序的元素为正序,则只需进行一趟排序,比较次数为n-1次,移动元素次数为0;若待排序的元素为逆序,则需要进行n-1趟排序,比较次数为,移动次数为,因此时间复杂度为

算法的空间效率O(1)

算法不稳定


快速排序

任取待排序序列中的某个元素作为标准,通过一次划分,将待排序元素分为左右子序列,然后对两个子序列继续进行划分,直至每一个序列只有一个元素为止。最后得到的序列便是有序序列

算法的时间效率:时间效率很好,因为每趟能确定的元素都呈指数增长,故时间复杂度为

算法的空间效率:由于使用递归,而递归使用栈,因此空间效率最优时为

算法的稳定性:由于包含跳跃式交换,因此不稳定


直接插入排序:从无序表中选择一个最小的元素插入形成有序表

算法时间效率O(n2)

空间效率O(1)

算法稳定


折半插入排序:是对直接插入排序的简单改进,通过不断地折半来快速确定元素插入位置

Java的Arrays类里的binarySearch()方法,就是折半查找的实现,用于从指定数组中查找指定元素,前提是该数组已经处于有序状态。


希尔排序

将所有元素按照某个增量分为若干子序列,子序列采用直接插入排序之后,减小增量,再次对子序列进行执行插入排序,直到整个序列有序

算法的时间效率:开销估计在之间

算法的空间效率:空间效率很高,只需要一个附加程序单元用于交换,其空间效率为 O(1)

算法的稳定性:不稳定


归并排序

将已经排序好的顺序表合并成一个已排序表,顺序比较两者相应元素,小者移入另一个表中,直至其中任一表都移入另一表为止

算法的时间效率:归并算法需要递归地进行分解、合并,每进行一趟归并排序,需要merge()方法一次,每次执行merge()需要比较n次,故复杂度为

算法的空间效率:较差,需要一个与原始序列同样大小的辅助序列

算法的稳定性:稳定


基数排序

基数排序的总体思路就是将待排数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序。


 


各种内部排序方法性能比较

1.从平均时间而言:快速排序最佳。但在最坏情况下时间性能不如堆排序和归并排序。

2.从算法简单性看:由于直接选择排序、直接插入排序和冒泡排序的算法比较简单,将其认为是简单算法,都包含在上图的“简单排序”中。对于Shell排序、堆排序、快速排序和归并排序算法,其算法比较复杂,认为是复杂排序。

3.从稳定性看:直接插入排序、冒泡排序和归并排序时稳定的;而直接选择排序、快速排序、 Shell排序和堆排序是不稳定排序 

4.从待排序的记录数n的大小看,n较小时,宜采用简单排序;而n较大时宜采用改进排序。


排序方法的选择

(1)若n较小(如n≤50),可采用直接插入或直接选择排序。当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接插入、冒泡或随机的快速排序为宜;

(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值