Eva 初学算法笔记 —— 1.直接插入排序
Eva 初学算法笔记 ——— 1.直接插入排序
引言:
上一年专业开设了《数据结构与算法》这门课程,但当时没有认真学。过了之后发现自己对于那些基本的经典算法都忘得差不多了,大学剩下的日子也不想当咸鱼。所以最近开始重新学习算法,写博客是为了做笔记加深记忆和理解,并不是像其他大神那样做教程。所以哪里错了希望大家可以指出,给点建议我这个初学者。
直接插入排序算法应该是我们这些听到最多的一种排序算法之一(尽管这样,我当时学完还是忘了)。它的基本思想是把一组数据分为有序区域和无序区域两部分,无序区域中的数据通过与有序区域的数据对比找到合适的位置进而插入到有序区域。
例如有一组待排序的无序序列,其中有n个元素(升序排序):
{ 4 , 2 , 3 , 7 , 1 , 5 , 0 , 9 , 8 , 6 }
- 因为一开始有序区域并没有任何元素,这里我们把array[0],即第1个元素放到有序区域。设无序区域的第1个元素为array[ i ],此时array[ i ]=2
{ 4 , 2 , 3 , 7 , 1 , 5 , 0 , 9 , 8 , 6 }
- 现在有序区域的最后1个元素为‘4’,即array[ i-1 ]=4(同时也是第1个,因为目前只有1个元素),现在把无序区域的第1个元素array[ i ]=2与有序区域的元素array[ i-1 ]=4相比较,很明显4>2,所以把array[ i ]插入到元素‘4’前面
{ 2 , 4 , 3 , 7 , 1 , 5 , 0 , 9 , 8 , 6 }
- 通过上一步,有序区域元素+1,无序区域元素-1。由于变量 i 是代表无序区域的第1个元素,所以此时i=i+1,即array[ i ]=3。重复上述步骤array[ i ]与有序区域最后1项对比,得array[ i-1 ]>array[ i ] 。 则元素‘3’会排在元素’4‘之前,继续和前面元素’2‘对比,就可以确定元素’3‘应该插入到有序区域的’2‘和’4‘之间。
{ 2 , 3 , 4 , 7 , 1 , 5 , 0 , 9 , 8 , 6 }
- 重复上述步骤,无序区域第1个元素’7‘与有序区域最后1个元素‘4’对比。由于有序区域已经是按照升序排序得出的有序序列(即7比有序区域的所有元素都大),所以元素‘7’的位置保持不变。
{ 2 , 3 , 4 , 7 , 1 , 5 , 0 , 9 , 8 , 6 }
- 多次重复上述步骤,直到最后1个待排序的元素array[n-1]=6插入到合适的位置,到此排序完成
{ 0, 1, 2 , 3 , 4 , 5 , 7 , 8 , 9 , 6 }
===>> { 0, 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }
以下是代码演示:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define SIZE 10void print(int a[], int n)
{for (int i = 0; i<n; i++){printf("%d ", a[i]);Sleep(100);}printf("\n\n ");
}void Insert_Sort(int a[], int n)
{for (int i = 1; i < 10; i++){int j = i - 1;while (j >= 0){if (a[i]>a[j]){break;}j--;}if (j != i - 1){int tmp = a[i];int k = i - 1;while (k > j){a[k + 1] = a[k];k--;}a[k + 1] = tmp;}print(a, n);Sleep(200);}
}int main()
{int a[10] = { 4, 2, 3, 7, 1, 5, 0, 9, 8, 6 };printf("Original sequence: ");print(a, SIZE);Insert_Sort(a, SIZE);system("pause");return 0;
}
运行效果如下:
Eva 初学算法笔记 —— 1.直接插入排序相关推荐
- 算法笔记1-排序-插入排序
插入排序的工作方式就像排序一手扑克牌.开始时,我们的左手为空,然后,我们每次从桌上拿走一张牌并将它插入到左手中正确的位置.为了找到正确的位置,我们总是从右到左将它与左手中的每张牌进行比较.这样,左手中 ...
- 【数据结构----笔记4】插入排序算法之【折半插入排序算法】
/*__________________________________________________________________________________________________ ...
- 算法笔记(JavaScript版)——排序
算法笔记(JavaScript版)--排序 本文内容根据Rebert Sedgewick和Kevin Wayne的<算法(第四版)>整理,原代码为java语言,自己修改为JavaScrip ...
- 算法笔记(胡凡)学习笔记@Kaysen
本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...
- 数据结构与算法笔记(青岛大学王卓老师视频)
写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...
- 《算法笔记》第四章笔记
<算法笔记>第四章 排序 排序算法的思想都比较简单,而且c++可以直接用sort函数进行排序,一般不会直接写排序代码 归根到底就是每轮处理一个数据,n个数据只需处理n-1次即可变得有序 选 ...
- QML初学读书笔记(三)
[动态元素:动画] 一.动画是由一连串的目标属性活动定义的,平缓的曲线算法能够引发一个定义时间内属性的持续变化. 所有在QtQuick中的动画都由同一个计时器来控制, 因此它们始终都保持同步, 这也提 ...
- 《算法笔记》学习 入门篇
目录 <算法笔记>学习 3.1 简单模拟 例1:[PAT B1001]害死人不偿命的(3n+1)猜想 例2:[PAT B1032]挖掘机技术哪家强 3.2 查找元素 例:[codeup 1 ...
- 算法笔记知识点整理大全
每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...
最新文章
- Linux Systemcall Int0x80方式、Sysenter/Sysexit Difference Comparation
- CTFshow php特性 web127
- LeetCode : Binary Tree Paths
- 天聪公司研发成功第三代声纹识别算法
- NTFS for Mac 15如何检查与修复连接的移动磁盘
- 使用jmeter测试接口
- Windows编译运行EasyPR
- Junit 4 与Junit 5区别
- matlab编制log算子程序代码,8.5.1实验1用Matlab生成LOG算子的图像.PDF
- PS 复制图层使用
- 球面坐标系转换为笛卡尔坐标系
- Safari插件机制研究(二) 插件的视图管理
- HTTP缓存 Last-Modified
- 计算机无法连接网络打印机,网络打印机无法连接怎么办 网络打印机无法连接教程【详解】...
- Impala: Reducing query concurrency or configuring admission control may help avoid this error
- 在IE8中使用建行企业网银的解决方法
- stm8下载程序(使用ST-LINK下载器和STVP下载软件)
- 单片机看门狗c语言,单片机看门狗程序
- 小米10S MIUI13.0.3线刷12.5.14
- 华为CaaS开放平台产品宣传片
热门文章
- js的dom操作,onmouseover事件,onmouseleave事件,定时器
- 《中文核心期刊要目总览(2014年版)》——计算机、自动化类
- 详谈什么是接口测试?
- 高并发基础之Java并发包
- MapReduce -----MapReduce 调优
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)
- 用MMD做mmd动态模型
- max 图片无法拖入3ds_达尔文3号和超级玛丽3号max,怎么选?首选它!
- EOS区块链浏览器:scaneos.io | EOS必备工具 |什么是区块链浏览器 | 怎么使用区块链浏览器