《重生之我在论坛学习》第一章

课堂知识点 学习重点

  • 时间复杂度在算法当中需要注意的事项
  • 插入排序算法介绍,插入排序的过程,插入排序的原理
  • 桶排序算法介绍,桶排序的过程,桶排序原理

思考题

  • 上节课的两个排序算法时间复杂度应该怎么计算? 写下你的思考:
  • 上节课的选择排序和冒泡排序过程是怎么样的?写下你的思考:
    知识点:
  1. 时间复杂度
    OJ 后台编译器每秒大约执行 10^7 个基本运算,学会根据题目给定的 n 的范围来选择算法。
时间复杂度 建议不超过的 n 的范围
O(logn) long long 内都行
O(n) 10^7
O(nlogn) 10^5~5*10^5
O(n2) 1000~5000
O(n3) 200~500
2.插入排序与桶排序

插入排序

插入排序是一种简单直观的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的排序过程如

  1. 从第一个元素开始,认为该元素已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果已排序的元素大于新元素,则将该元素移到下一位置
  4. 重复步骤 3,直到已排序的元素小于或等于新元素
  5. 将新元素插入到该位置后
  6. 重复步骤 2~5,直到排序完成

如图所示

2 10 12 5 6 原始数据
2 10 12 5 6 第一趟排序(
2 10 12 5 6 第二趟排序(
4 10 12 1 5 6 第三趟排序(
4 10 12 5 6 第四趟排序(
4 10 12 5 6 第五趟排序(
3 4 10 12 5 6 第六趟排序

  1. 确定桶的数量和范围
  2. 将要排序的数据当作小旗分配到各个桶中
  3. 遍历所有的桶
  4. 如果桶中有小旗,则看桶中有几面小旗,有几面输出几次桶的下标

注意:桶排序也可以用于去重,在第四步中,我们只要判断桶中有小旗即输出桶的编号即可,不需要看里面具体有几面小旗。

桶排序实现过程图:

注:logn 的计算方式:
logn 是以 2 为底的对数,表示将底数为 2 的指数幂变为 n 所需要的幂次,即 2^k=n,则 k=log_2n 此处表达的意思就是以 2 为底,n 的对数,可简写为 logn。
核心代码:
/插入排序/
for(int i=2;i<=n;i++)
for(int j=i;j>=2;j–)
if(a[j]<a[j-1]) swap(a[j],a[j-1]);
else break;
} }

3 个赞