Data Structure (二)

搜索技术的应用

搜索分为查找遍历

查找:无序:顺序搜索、二叉搜索树BST;有序:二分搜索

遍历:深度优先(栈的应用);广度优先(队列的应用)

排序知识

排序:就是将一组无序的记录序列按照某种逻辑顺序重新排序,调整为有序的记录序列的过程。

1.排序算法分类:

存储器不同分类:

内部排序算法:当参加排序的数据量不大时,在排序过程中将全部记录存放在内存中处理,这种算
法称为内部排序算法。

外部排序算法:当参加排序的数据量较大时,以致于内存不足以一次存放全部记录,在排序过程中
需要通过内存与外存之间的数据交换来达到排序目的,这种排序算法称为外部排序算法。

稳定性:

稳定性排序算法:对于值相同的两个元素,排序前后的先后次序不变

非稳定性排序算法:对于值相同的两个元素,排序前后的先后次序改变

组织方式:
顺序存储结构排序算法:记录之间的逻辑顺序是通过其物理地址的先后来映射,在排序过程中需要
移动记录的位置。

链式存储结构排序算法:文件中的一个记录对应着链表中的一个链结点,记录之间的逻辑顺序是通
过指针来反应,因而排序过程中不必移动记录,只需修改相应指针的指向。

2.常见排序算法:冒泡排序算法,选择排序算法,插入排序算法,希尔排序算法,归并排序算法,快速排序算法,堆排序算法,计数排序算法,桶排序算法,基数排序算法。

按时间复杂度分:

O(n^2):冒泡排序算法,选择排序算法,插入排序算法

O(n*log2 n):希尔排序算法,归并排序算法,快速排序算法,堆排序算法

O(n):计数排序算法,桶排序算法,基数排序算法

3.1冒泡排序(稳定性排序算法)

1.1 冒泡排序 | 菜鸟教程 (runoob.com)

O(n),O(n^2)

3.2选择排序算法(非稳定性排序算法)

1.2 选择排序 | 菜鸟教程 (runoob.com)

3.3插入排序算法(稳定性排序算法)(类似打扑克牌)

1.3 插入排序 | 菜鸟教程 (runoob.com)

O(n^2)

3.4希尔排序算法(非稳定性排序算法)

1.4 希尔排序 | 菜鸟教程 (runoob.com)

子序列分别进行插入排序,直到排序间隔为1

 3.5归并排序算法(稳定性排序算法)

1.5 归并排序 | 菜鸟教程 (runoob.com)

先递归将当前序列平均分为两半,然后将有序序列两两合并,最终合并成一个有序序列

3.6快速排序算法

通过一趟排序将无序序列分为独立的两个序列,第一个序列的值均比第二个序列的值小。然后递归
地排列两个子序列,以达到整个序列有序。

1.6 快速排序 | 菜鸟教程 (runoob.com)(非稳定性排序算法)

快速排序应该算是在冒泡排序基础上的递归分治法

3.7堆排序算法

1.7 堆排序 | 菜鸟教程 (runoob.com)

1.首先将无序序列构造成第 1 个大顶堆(初始堆),使得 n 个元素的最大值处于序列的第 1 个位置。
2.然后交换序列的第 1 个元素(最大值元素)与最后一个元素的位置。
3.此后,再把序列的前 n - 1 个元素组成的子序列调整成一个新的大顶堆,这样又得到第 2 个最大值元素,把子序列的第 1 个元素(最大值元素)与第 n - 1 个元素交换位置。
4.此后再把序列的前 n - 2 个元素调整成一个新的大顶堆,……,如此下去,直到整个序列变换成一个有序序列。

3.8计数排序算法

1.8 计数排序 | 菜鸟教程 (runoob.com)

3.9桶排序算法

1.8 计数排序 | 菜鸟教程 (runoob.com)

每个桶使用插入、归并、快排等算法

3.10基数排序算法(稳定)

1.8 计数排序 | 菜鸟教程 (runoob.com)

合并两个有序数组:

•我们使用两个指针 index1、index2 分别指向 nums1、nums2 元素的尾部。再用一个指针 index 
指向数组 nums1 的尾部。
•然后从后向前判断当前指针下 nums1[index1] 和 nums[index2] 的值大小,将较大值存入 
num1[index] 中,然后继续向前遍历。
•最后再将 nums 中剩余元素赋值到 num1 前面对应位置上。

排序数组:

超时:O(n^2):冒泡排序算法,选择排序算法,插入排序算法

通过:O(n*log2 n):希尔排序算法,归并排序算法,快速排序算法,堆排序算法

通过:O(n):计数排序算法,桶排序算法

解答错误算法:基数排序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值