插入排序总结

2023-11-19

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
排序思路:
假设按照升序排序
1.从索引为1的元素开始向前比较, 一旦前面一个元素大于自己就让前面的元素先后移动
2.直到没有可比较元素或者前面的元素小于自己的时候, 就将自己插入到当前空出来的位置
在这里插入图片描述

1.原理

3 6 7 4 2 1 5
分为两段,一段已经排好顺序,一段还没有排序
[3 6 7] 4 2 1 5
从4开始插到前面已经排好序的位置中去
理论上是这样,但是在真正写代码的时候还需要其他来实现插入的操作
0 1 2 3
arr 3 6 7 4 …
i
key

key =4
while(arr[i-1]>key){
=>arr[i]=arr[i-1];
i–;
}
arr[i]=key;

3 6 7 4 2 1 5
3 6 7 已经排好序
对4进行操作
3 6 7 4 2 1 5
从后往前比
47比,4小于7
3 6 4 7   2 1 5先不管
对于64 6大于4
3 4 6 7
对于43来说,3小于4 因此不需要交换位置
3 4 6 7 2 1 5
下面对2进行操作
[3 4 6 7] 2 1 5
对于 72来说,7大于2
3 4 6 2 7       1 5先不管
下面判断62

2.代码

# include<stdio.h>
void insert(int arr[],int n){
	int key = arr[n];
	int i = n;
	while(arr[i-1]>key){
		arr[i] = arr[i-1];
		i--;
		if (i==0){
			break;
		}
	}
	arr[i] = key;
}
void insertionSort(int arr[],int n){
	int i;
	for(i=1;i<n;i++){
		insert(arr,i);
	}
}
int main(){
	int arr[] = {9,1,2,3,6,5,7,8,4};
	int i;
	insertionSort(arr,9);
	for(i=0;i<9;i++){
		printf("%d\n",arr[i]);
	}
}
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main()
{
    // 待排序数组
    int nums[5] = {3, 1, 2, 0, 3};
    // 0.计算待排序数组长度
    int len = sizeof(nums) / sizeof(nums[0]);

    //  1.从第一个元素开始依次取出所有用于比较元素
    for (int i = 1; i < len; i++)
    {
        // 2.取出用于比较元素
        int temp = nums[i];
        int j = i;
        while(j > 0){
            // 3.判断元素是否小于前一个元素
            if(temp < nums[j - 1]){
                // 4.让前一个元素向后移动一位
                nums[j] = nums[j - 1];
            }else{
                break;
            }
            j--;
        }
        // 5.将元素插入到空出来的位置
        nums[j] = temp;
        
    }
    for(int i =0;i<len;i++)
        {
        	printf("%d ",nums[i]);
		}
}

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main()
{
    // 待排序数组
    int nums[5] = {3, 1, 2, 0, 3};
    // 0.计算待排序数组长度
    int len = sizeof(nums) / sizeof(nums[0]);

    //  1.从第一个元素开始依次取出所有用于比较元素
    for (int i = 1; i < len; i++)
    {
        // 2.遍历取出前面元素进行比较
        for(int j = i; j > 0; j--)
        {
            // 3.如果前面一个元素大于当前元素,就交换位置
            if(nums[j-1] > nums[j]){
                int temp = nums[j];
                nums[j] = nums[j - 1];
                nums[j - 1] = temp;
            }else{
                break;
            }
        }
    }
    for(int i =0;i<len;i++)
        {
        	printf("%d ",nums[i]);
		}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插入排序总结 的相关文章

随机推荐

  • IDEA为spring-boot添加热部署

    在IDEA中 可以为spring boot添加热部署 一旦修改了java文件 spring boot会重新编译修改的文件 而不用重启 一 打开pom xml 添加依赖
  • 关于LC电路中电磁振荡过程的一个问题,向各位求教

    关于LC电路中电磁振荡过程的一个问题 向各位求教 复制链接 LC电路关键是产生能量在电感 L 和电容器 C 之间的转换 电感可以维持电流保持不变 电容可以维持两端电压不变 能量就在这个电压与电流之间转换 当电感中有电流时就会产生磁场 电容器
  • 若依框架自定义登录(免密登录)

    1 继承DaoAuthenticationProvider package com ruoyi framework config import org springframework security authentication BadC
  • iOS

    我们有的时候在创建UIView的时候 想要使用xib进行创建视图发现 xib文件不能和UIView文件一起创建 所以 我们要单独创建xib文件 我们选择Empty文件 而不要选择View文件 记得文件名和你之前创建的UIView文件名要一致
  • 简单了解默克尔(Merkle)树

    Merkle树是Ralph Merkle在1988年发明的 旨在构建更好的数字签名 原文是A DIGITAL SIGNATURE BASED ON A CONVENTIONAL ENCRYPTION FUNCTION本篇论文在Weki百科中
  • 各种平台下Perl模块的安装方法

    Perl到了第五版增加了模块的概念 用来提供面向对象编程的能力 这是Perl语言发展史上 的一个里程碑 此后 广大自由软件爱好者开发了大量功能强大 构思精巧的Perl模块 极大地 扩展了Perl语言的功能 CPAN Comprehensiv
  • 交换机access与trunk口

    交换机access与trunk口 转载自 https www cnblogs com weiyikang p 4945914 html 理论知识 以太网端口二种链路类型 Access 和Trunk Access 类型的端口 只能属于1 个V
  • 攻防世界-fileclude

  • Android-小游戏

    Android 打地鼠游戏 前端界面 布局文件 TableLayout 表格布局 TableRow 行 TextView 文本框 ImageView 图片框 java代码 Handler 消息处理 Runnable 建子线程 setOnCl
  • 自定义QMessageBox显示\按钮功能

    QPushButton okbtn new QPushButton QString fromLocal8Bit 确定 QPushButton cancelbtn new QPushButton QString fromLocal8Bit 取
  • Redis和MySQL的数据同步问题

    Redis的工作流程 1 前台发送请求 后台接口去查询 2 先去查询Redis缓存里面有没有数据 如果有数据 就直接返回数据 3 如果Redis缓存里面没有数据 就去查询数据库 在数据库中查到数据以后 保存到Redis缓存中 然后在返回前台
  • 5、面向对象的设计思想

    一 面向对象设计思想 1 1 面向过程的设计思想与面向对象的设计思想 例如 我要去新疆 面向过程 我开车 我挂挡 我踩油门 我过河北 我过陕西 面向对象 我命令车去新疆 车怎么去不关我事 信息封装在这这个类的内部 我不用去了解车整个开动的过
  • SATA M.2 NGFF PCIE AHCI NVME SSD固态硬盘的接口、总线和协议区分

    总线 协议 说接口之前先说总线 民用产品的硬盘总线多为 SATA 和 PCIe SATA 总线只能使用 AHCI 协议 NVME 对比 AHCI 的优势在于 低延时 低功耗 更适合固态硬盘 PCIe总线 可以使用 AHCI 也可以使用更高效
  • uniapp vue3 h5,微信小程序滚动屏幕元素渐入动画&自定义导航栏

    项目文件下载地址 实际效果如下 一 滚动屏幕元素渐入 注意事项 animate css需要添加样式兼容微信小程序 微信小程序滚动时boundingClientRect获取不到标签信息 1 HBuilderX打开uniapp创建的vue3项目
  • 【java】案例一:使用java写的记账软件

    目录 一 需求说明 二 主要思路 三 代码实例 四 运行结果 一 需求说明 1 能够记录家庭的收入 支出 并能够打印收支明细表 2 项目采用分级菜单方式 3 假设家庭起始的生活基本金为10000元 每次登记收入后 收入的金额应累加到基本金上
  • 输入框去空格指令兼容ios苹果系统中文输入法

    export class InputXXXDirective constructor private elementRef ElementRef private control NgControl HostListener keydown
  • 线性代数的本质(九)——二次型与合同

    文章目录 二次型与合同 二次型与标准型 二次型的分类 度量矩阵与合同 二次型与合同 二次型与标准型 Grant 二次型研究的是二次曲面在不同基下的坐标变换 由解析几何的知识 我们了解到二次函数的一次项和常数项只是对函数图像进行平移 并不会改
  • E:Package 'Vim' has no installation candidate问题解决

    不多说 直接上干货 问题描述 root zhouls virtual machine apt get install vim Reading package lists DoneBuilding dependency tree Readin
  • GPT-3 模型特点

    Overview 模型 描述 GPT 3 一组能够理解和生成自然语言的模型 Codex Limited beta 一组可以理解和生成代码的模型 包括将自然语言转换为代码 Content filter 一种经过微调的模型 可以检测文本是否敏感
  • 插入排序总结

    插入排序 Insertion Sort 的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 排序思路 假设按照升序排序 1 从索引为1的元素开始向前比较 一旦前