插入排序,选择算法与快速排序(c语言,Java语言)

news2024/11/16 19:37:04

插入排序

原理:从数组的第二个元素开始,将数组中的每一个元素按照(升序或者降序)规则插入到已排好序的数组中以达到排序的目的。

插入排序并不是将元素取出来,插入到合适位置,之后的元素的位置依次加一,而是元素两两比较,直到交换到合适位置,没有元素位置移动的过程,只有元素值交换。在宏观上像取出来插入一样,因此称为插入排序。

在这里插入图片描述

在上图中,数组7,6,9,3 …按升序排列,那么将7当作已升序排列好的一个元素的数组,从第二个元素比较,那么6<7应该”插入“到7之前,所以6,7交换元素,就相当于6插入到7之前。

在这里插入图片描述
第三个元素是9,大于7,无需移动,后一个元素是3,该元素需要与其位置之前的所有元素比较,而且是比较一次交换依次,而不是直接插入到6之前。过程是前与9比较小于然后交换值,然后在该位置在与前一个元素比较判断是否交换,也就是说每次比较符合条件,则向前移动一位,下一次比较再从当前位置与前一位比较,以此类推。

在这里插入图片描述

每次赋值是两两交换,一共需要循环n次,每个元素需要依次与其前或改变后前的元素比较。

//核心比较部分
for(i=0;i<len;i++){    //一共需要比较的总次数
		for(j=i;j>0;j--){     //每个元素还需与其前的元素比较
			if(a[j] < a[j-1]){
				int tmp = a[j];
				a[j]= a[j-1];
				a[j-1] = tmp;
			}
		}
	}
  1. c语言实现
#include<stdio.h>

int main(){
	int i,j;
	int a[]= {7,6,9,3,1,5,2,4};
	int len = sizeof(a)/sizeof(int);
	for(i=0;i<len;i++){
		for(j=i;j>0;j--){
			if(a[j] < a[j-1]){
				int tmp = a[j];
				a[j]= a[j-1];
				a[j-1] = tmp;
			}
		}
	}
	for(i=0;i<len;i++){
		printf("%d,",a[i]);
	}
	printf("\n");
} 
  1. java实现
public class InsertSort {
    public static void main(String args[]){
        int a[]=new int[]{7,6,9,3,1,5,2,4};
        insertSort(a);
        for (int i =0;i<a.length;i++){
            System.out.print(a[i]+"~");
        }

    }

    /**
     * @description 插入算法
     * 核心:从第一位为元素开始当作已排序的数组,之后的元素依次与之前元素比较直到大于前者,小于后者(或者大于前者小于后者),满足则交换元素的值。
     * 比较是两脸个比较的,因此循环比较完的元素是排序好的,在宏观上相当于将元素取出来插入到合适的位置
     */
    public static void insertSort(int a[]){
        for (int i =1;i<a.length;i++){     //对于每一个元素都需要取出判断
            for (int j=i;j>0;j--){         //每个元素需要依次与其前的元素比较直到插入到合适位置
                if(a[j] <a[j-1] ){
                    int tmp = a[j];
                    a[j] = a[j-1];
                    a[j-1] = tmp;
                }
            }
        }
    }
}

插入排序对n个元素的数组来说,外层循环n次,内层约n-1次,因此时间复杂度为:

O ( n ) = n 2 O(n) = n^2 O(n)=n2

选择排序

原理:选择排序是每次选择最小的放在未排序数组的开始位置。

在这里插入图片描述

在如图所示的数组中选择最小的1放在数组初位置,则该位置作为已排序的数组,再从剩下的数组中选择最小的继续放在初位置,以此类推。

对于数组来说需要对n个元素查找最小的,每次查找最小的的需要n-i次。

  1. c语言实现
#include<stdio.h>

int main(){
	int i,j;
	int a[]= {7,4,5,9,8,2,1};
	int len = sizeof(a)/sizeof(int);
	for(i=0;i<len;i++){      //依次取出n个元素
		for(j=i;j<len;j++){    //对每个元素于剩余元素作比较取最小值
			if(a[i] > a[j]){
				int tmp = a[i];
				a[i]= a[j];
				a[j]= tmp;
			}
		}
	}
	for(i=0;i<len;i++){
		printf("%d",a[i]) ;
	}
}
  1. java实现
package 选择排序;

public class QuickSort {
    public static void main(String[] args) {
        int a[] = new int[]{7,4,5,9,8,2,1};
        for (int i =0;i< a.length;i++){
            for(int j =i+1;j<a.length;j++){
                if(a[i]<a[j]){
                    int tmp = a[i];
                    a[i] = a[j];
                    a[j] = tmp;
                }
            }
        }

        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在职阿里8年,一个31岁女软件测试工程师的心声

简单的先说一下&#xff0c;坐标杭州&#xff0c;13届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; 其中成功的有4家&am…

【STL】stack、queue基本使用和模拟实现

目录 前言 stack 接口介绍 模拟实现 queue 接口介绍 模拟实现 没有迭代器 deque介绍 前言 stack 和 queue 本质上是一种容器配接器&#xff0c;就像我们平时充电时使用的电源适配器&#xff0c;能够将电压转换成设备能够接受的程度。 其通过封装特定容器作为其底层…

我的测试之路:从入坑测试到月薪15k...

“干过保险卖过房&#xff0c;做过销售做过网管”这是我毕业后前两年的真实写照&#xff0c;因为所学网络安全专业不好找工作&#xff0c;毕业之后为了生活只能将就的干着这种门槛低的工作。后来一次同学聚会被同学带下坑后&#xff0c;正式转行软件测试。 刚入坑的两年&#…

【自动化测试实战】从 0 到 1 搭建 Dubbo 接口自动化测试

前言 1、Dubbo 接口自动化测试框架实现逻辑 2、框架具体功能 3、关键实践 3.1 下载 provider 的 jar 包&#xff0c;并代理声明 zookeeper 设置 3.2 邮件发送功能 3.3 封装 Dubbo 接口信息类 3.4 利用 JMeter 调用 provider 服务&#xff0c;并断言&#xff0c;邮件报警…

音视频基础及海思sample_venc解读

1、sample的整体架构 (1)sample其实是很多个例程&#xff0c;所以有很多个main (2)每一个例程面向一个典型应用&#xff0c;common是通用性主体函数&#xff0c;我们只分析venc (3)基本的架构是&#xff1a;venc中的main调用venc中的功能函数&#xff0c;再调用common中的功…

python基于DeeplabV3Plus开发构建裂缝分割识别系统,并实现裂缝宽度计算测量

在我之前的文章中已经有不少基于裂缝场景的数据开发构建的模型了&#xff0c;感兴趣的话可以自行移步阅读&#xff0c;如下&#xff1a; 《基于yolov5sbifpn实践隧道裂缝裂痕检测》 《基于YOLOV7的桥梁基建裂缝检测》 《水泥路面、桥梁基建、隧道裂痕裂缝检测数据集》 《基…

SpringBoot异步执行方法

1. 源码跟踪 1.简单描述 在SpringBoot2.0.9之前需要手动自定义线程池(如下2.1), 然后指定线程池的名称 SpringBoot2.0.9以及之前的版本,使用的线程池默认是SimpleAsyncTaskExcutor, , 之后的版本使用的是ThreadpoolTaskExecutor 并且不需要手动的创建当前线程池(但往往我们…

多线程基础(五)ThreadLocal与四种引用

一、ThreadLocal ThreadLocal&#xff1a;解决每个线程绑定自己的值&#xff0c;存放线程的私有数据。 public class ThreadLocalTest {public static ThreadLocal local new ThreadLocal();public static void main(String[] args) {if(local.get() null){local.set("…

加成序列 dfs 迭代加深 java

&#x1f351; 加成序列 满足如下条件的序列 X X X&#xff08;序列中元素被标号为 1 、 2 、 3 … m 1、2、3…m 1、2、3…m&#xff09;被称为“加成序列”&#xff1a; KaTeX parse error: Undefined control sequence: \[ at position 2: X\̲[̲1\]1KaTeX parse error…

一文读懂MVCC:数据库中的并发读写利器!

大家好&#xff0c;我是你们的小米&#xff0c;一个积极活泼、喜好分享技术的小伙伴。今天&#xff0c;我想和大家聊一聊数据库领域的一个重要话题——MVCC多版本并发控制。MVCC是MySQL和其他一些数据库系统中常用的并发控制技术&#xff0c;通过它&#xff0c;我们可以在高并发…

如何用 Python 实现所有算法?

学会了 Python 基础知识&#xff0c;想进阶一下&#xff0c;那就来点算法吧&#xff01;毕竟编程语言只是工具&#xff0c;结构算法才是灵魂。 新手如何入门 Python 算法&#xff1f; 几位印度小哥在 GitHub 上建了一个各种 Python 算法的新手入门大全。从原理到代码&#xff0…

milkV-duo的Linux的开发环境搭建

目录 写在前面 内核编译 烧录失败的示例&#xff08;这种情况下就和插上空卡一样) 进入系统 串口进入 SSH接入 写在前面 基本上大部分的问题都能在开源社区上得到答案,记录下我遇到的问题. 附上开源社区 MilkV Community 这里的引脚图和板子的丝印有点对不上&#xff…

竞赛中常用的Python 标准库

对竞赛中常用得标准库进行解析和给出代码模板 目录 1.functools 1.1 cmp_to_key 1.2 lru_cache&#xff08;记忆化存储&#xff0c;加快递归速度&#xff09; 2.collections 2.1 deque 2.1.1 单调对列实现 2.1.2 BFS广搜 3.sys 3.1 sys.maxsize 3.2 sys.exit() 3.…

使用python的plot绘制loss、acc曲线,并存储成图片

使用 python的plot 绘制网络训练过程中的的 loss 曲线以及准确率变化曲线&#xff0c;这里的主要思想就时先把想要的损失值以及准确率值保存下来&#xff0c;保存到 .txt 文件中&#xff0c;待网络训练结束&#xff0c;我们再拿这存储的数据绘制各种曲线。 其大致步骤为&#x…

代码自动生成工具——TableGo(实例演示)

一、常用的代码生成器工具介绍 在SpringBoot项目开发中&#xff0c;为了提高开发效率&#xff0c;我们经常需要使用代码自动生成工具来生成一些重复性的代码&#xff0c;比如实体类、DAO、Service、Controller等等。下面介绍几个常用的代码自动生成工具&#xff1a; ①、MyBat…

如何在Linux 启用组播

第一章: 前言 多播技术&#xff0c;也被称为“组播”&#xff0c;是一种网络通信机制&#xff0c;它允许一个节点&#xff08;发送者&#xff09;向一组特定的节点&#xff08;接收者&#xff09;发送信息。这种方式在网络编程中非常有用&#xff0c;因为它可以大大提高效率和…

深度学习(Pytorch):Softmax回归

Softmax简介 Softmax回归是一个用于多类分类问题的线性模型&#xff0c;它是从Logistic回归模型演变而来的。Softmax回归与Logistic回归类似&#xff0c;但是输出不再是二元的&#xff0c;而是多类的。Softmax回归引入了softmax激活函数来将输出转换为合理的概率分布。与线性回…

HCIE-Cloud Computing LAB备考--第五题:规划--Type13练习--记忆技巧+默写

对LLD表,交换机接口表,ensp配置进行练习,如下图,设置答案和空白表,进行默写,汇总自己的容易犯的错误 LLD表默写思路 交换机接口配置表默写思路 以Type3为例,同颜色复制即可,共用ST.P0是A25,ST.P2是A21,FS是ST.P0是A21,ST.P2是A21。 ensp配置默写思路 特点: 所…

一步一步学习 Stable Diffusion

一步一步学习 Stable Diffusion 0. 背景1. 安装2. 汉化3. 安装 sd-webui-controlnet 插件4. 安装 sd-webui-segment-anything 插件5. 安装 ultimate-upscale 插件6. 安装 SadTalker 插件7. 下载和配置 VAE 模型8. 使用 ChilloutMix 模型99. 未完待续 0. 背景 网上看了很多 Sta…

priority_queue(优先级队列)

priority_queue 1. priority_queue的介绍及使用1.1 priority_queue的介绍1.2 priority_queue的使用1.2.1 constructor(构造)1.2.2 empty1.2.3 size1.2.4 top1.2.5 emplace1.2.6 push、pop、swap 1.3 数组中第K个大的元素 2.priority_queue的深度剖析及模拟实现 1. priority_que…