当前位置: 首页 > news >正文

排序相关算法--1.插入排序+冒泡排序回顾

1.基本分类

2.插入排序

特点:有实践意义(例如后期快排的优化),适应性强,一般不会到时间复杂度最坏的情况。

  1. 将第一个元素视为已经排好序的序列
  2. 取出下一个元素,在已经排好序的序列中从后往前比较,直到找到合适的位置插入。
  3. 重复步骤2,直到所有元素都插入到合适的位置。

  1. //插入排序
    #include<stdio.h>
    void InsertSort(int* a, int n)
    {for (int i = 0; i < n - 1; i++){int end;int tmp = a[end + 1];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];--end;}else {break;}}a[end + 1] = tmp;}
    }

上图一种特殊情况:此时不是break出来的而是一直进行--

所以不走else了,因此将最后一句放在外面无论是哪种情况都可以

单趟

排序:先理解单趟然后加上循环

整清楚边界。因为是从0开始访问的,所以只能访问到n-1;

因此在访问的时候只循环到n-2;,

i的最后一个值是n-2;所以是i<n-1;

计算插入排序的时间复杂度

时间复杂度计算最坏情况:逆序(就相当于一个等差数列)O(N^2)   N的平方。

最好:顺序 O(N)(只比一遍)

介于两者中间。

3.冒泡排序回顾

特点:没有实践意义,一般只用于教学

在指针基础知识点合集2(基础入门到深入理解)中有用指针讲解过一遍。

如果不用今天再供一种不用指针的方法。

void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){int flag = 0;for (int i = 0; i < n - j; i++){//先排单趟if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);flag = 1;}}if (flag == 0){break;}}
}

计算插入排序的时间复杂度

时间复杂度计算最坏情况:O(N^2)   N的平方。

最好: O(N)(直接就有序)

(和插入排序是一样的)

http://www.lryc.cn/news/396658.html

相关文章:

  • 变阻器的故障排除方法有哪些?
  • 软考《信息系统运行管理员》-3.1信息系统设施运维的管理体系
  • Nginx重定向
  • 私有化地图离线部署方案之高程检索服务
  • PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?
  • 数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )
  • Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)
  • Python: 分块读取文本文件
  • 服务攻防——中间件Jboss
  • 宏碁F5-572G-59K3笔记本笔记本电脑拆机清灰教程(详解)
  • 基于FPGA的LDPC编译码算法设计基础知识
  • 国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践
  • 空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!
  • 代码江湖:Python 中的进程与线程
  • 根据H在有限域GF(2^m)上求解生成矩阵G
  • Django 实现子模版继承父模板
  • 数据安全治理:从库级权限申请到表级权限申请
  • vue3源码(六)渲染原理-runtime-core
  • python拆分Excel数据,自动发邮箱
  • 2024年福州延安中学夏季拿云杯拔尖创新人才素养测试(小高组)
  • ES6 之 Promise 构造函数知识点总结 (四)
  • KIVY 3D Rotating Monkey Head¶
  • 测试几个 ocr 对日语的识别情况
  • 华为机考前准备工作
  • 偏差、方差(训练误差,验证误差)
  • Retrofit框架源码深度剖析【Android热门框架分析第二弹】
  • C++Windows环境搭建(CLion)
  • 【区块链 + 智慧政务】省级一体化区块链平台 | FISCO BCOS应用案例
  • 局域网远程共享桌面如何实现
  • Ubuntu固定虚拟机的ip地址