****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序
一、排序
将一组杂乱无章的数据按一定的规律次序排列起来。
排序的目的是什么?
*便于查找!
排序算法的好坏如何衡量?
*时间效率--排序速度(即排序所花费的全部比较次数)
*空间效率--占内存辅助空间的大小
*稳定性--若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。
*内部排序:指待排序记录全部存放在内存中排序的过程。
*外部排序:指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的过程。
排序方法:
*插入排序
**直接插入排序
**希尔排序
*选择排序
**直接选择排序
**堆排序
*交换排序
**冒泡排序
**快速排序
*归并排序
二、插入排序
每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
插入排序有多种具体实现算法:
1)直接插入排序
2)希尔排序
(1)直接插入排序
先将序列中第1个记录看出一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序,排序过程为n-1趟插入。
*时间效率:因为在最坏的情况下,所有元素的比较次数总和为(0 + 1 + ... + n-1) -> O(n2)。故时间复杂度为O(n2)
*空间效率:仅占用一个缓冲单元---O(1)
*算法的稳定性:稳定
(2)希尔排序
先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di = 1,即所有记录放进一个组中排序为止。
一般取d1 = n/2,,di+1=di/2,如果结果为偶数,则加1.
三、选择排序
每一次从待排序的数据元素中选出最小的一个元素,存放在已经排序列的后面,直到全部待排序的数据元素拍完。
*优点:实现简单
*缺点:每趟只能确定一个元素,表长为n时需要n-1趟
*前提:顺序存储结构
选择排序分为
1)直接选择排序
2)堆排序
(1)直接选择排序
在所有记录中选出最小的记录,把它与第1个路径交换,然后在剩余的记录内选出最小的记录与第2个交换...依次类推。
(2)堆排序
堆是满足下列性质的数列{r1,r2,...,rn}
堆排序即是利用堆的特性堆记录序列进行排序的一种排序方法。
将无序序列建成一个堆,得到关键字最小(或者最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫做堆排序。
输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个堆顶至叶子的调整过程为“筛选”
堆排序的最坏时间复杂度为O(nlog2n),堆排序的平均性能接近最坏性能。
堆排序的辅助空间为O(1)。
将一组杂乱无章的数据按一定的规律次序排列起来。
排序的目的是什么?
*便于查找!
排序算法的好坏如何衡量?
*时间效率--排序速度(即排序所花费的全部比较次数)
*空间效率--占内存辅助空间的大小
*稳定性--若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。
*内部排序:指待排序记录全部存放在内存中排序的过程。
*外部排序:指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的过程。
排序方法:
*插入排序
**直接插入排序
**希尔排序
*选择排序
**直接选择排序
**堆排序
*交换排序
**冒泡排序
**快速排序
*归并排序
二、插入排序
每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
插入排序有多种具体实现算法:
1)直接插入排序
2)希尔排序
(1)直接插入排序
先将序列中第1个记录看出一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序,排序过程为n-1趟插入。
*时间效率:因为在最坏的情况下,所有元素的比较次数总和为(0 + 1 + ... + n-1) -> O(n2)。故时间复杂度为O(n2)
*空间效率:仅占用一个缓冲单元---O(1)
*算法的稳定性:稳定
(2)希尔排序
先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di = 1,即所有记录放进一个组中排序为止。
一般取d1 = n/2,,di+1=di/2,如果结果为偶数,则加1.
三、选择排序
每一次从待排序的数据元素中选出最小的一个元素,存放在已经排序列的后面,直到全部待排序的数据元素拍完。
*优点:实现简单
*缺点:每趟只能确定一个元素,表长为n时需要n-1趟
*前提:顺序存储结构
选择排序分为
1)直接选择排序
2)堆排序
(1)直接选择排序
在所有记录中选出最小的记录,把它与第1个路径交换,然后在剩余的记录内选出最小的记录与第2个交换...依次类推。
(2)堆排序
堆是满足下列性质的数列{r1,r2,...,rn}
堆排序即是利用堆的特性堆记录序列进行排序的一种排序方法。
将无序序列建成一个堆,得到关键字最小(或者最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫做堆排序。
输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个堆顶至叶子的调整过程为“筛选”
堆排序的最坏时间复杂度为O(nlog2n),堆排序的平均性能接近最坏性能。
堆排序的辅助空间为O(1)。