前言-数据结构
数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。
交换排序
- 基本原理:是在待排序的记录序列中,两两比较待排序记录关键字,并交换不满足要求的偶对,直到整个序列中的所有记录都满足要求为止。
- 有冒泡排序
- 快速排序
冒泡排序
- 基本思想
- 通过两两比较相邻的关键字,如果发生逆序,则进行交换,从而使关键字小的记录,如气泡一般向上漂浮, 或者使关键字大的记录像石头一样逐渐向下坠落。
- 算法步骤
- 在待排序的记录序列中,从待排序记录Ri开始,两两比较Ri,key与Ri+1 key(i= 1,2, …n-1), 第1趟比较完毕后, Rn key为关键字最大的记录。
- 再从待排序记录R开始,两两比较Ri,key与Ri+1 key(i=1, 2, …n-2),第2趟比较完毕后,Rn-1. key为关键字次最大的记录。
- 如此反复,进行n-1趟加工,排序完成。
- 例子:就是相邻的两个之间的比较
- 性能分析
- 考虑关键码的比较次数和数据对象移动次数,最好情况时两者分别为: n-1与0,最坏的情况分别为:
- 冒泡排序的时间复杂度为0(n2)。
- 冒泡排序的空间复杂度为0(1)。
- 冒泡排序是 一种稳定的排序方法。
快速排序
- 基本思想
是取待排序的结点序列中菜个结点的值作为控制值采用某种方法把这个结点点放到适当的位置,使得这个位置的左边的所有结点的值都小于等于这个控制值,而这个位置的右边的所有结点的值都大于等于这个控制值。然后分别对这两个子序列重复实施上述方法。 - 算法步骤
- 设置两个变量,排序开始的时候: i=0,j=N-I (N为元素个数)。
- 以题一个数组元有作为关键数据,赋给key, hey[A].
- 从j开始向前搜索,即由后开始向前搜索(j–) ,找到第一个小于key的值A[j],将A[j]和A[i]互换。
- 从开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换。
- 重复第3、4步,直到i=j
- 例子
- 性能分析
- 考虑关键码的比较次数和数据对象移动次数。从快速排序算法的运行时间上看,在该算法中,快速排序所需的执行时间,与参照记录的选择关系极大。通常情况下快速排的时间复杂度为0(nlogn)。
- 快速排序的空间复杂度为O(log2n)。
- 快速排序是一种不稳定的排序 方法。