小工具      在线工具  汉语词典  css  js  c++  java

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

程序、数据结构与算法,java,算法,c语言 额外说明

收录于:152天前

插入排序

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

插入排序并不是取出元素,插入到适当的位置,然后为后续元素的位置加一。相反,元素会成对比较,直到它们交换到适当的位置。没有移动元素位置的过程,只有元素值的交换。宏观上就像取出和插入,所以称为插入排序。

在这里插入图片描述

上图中,数组7,6,9,3…按照升序排列,那么7就看成是已经升序排列的元素数组,从第二个元素开始比较,则6< 7应该在7之前“插入”到7​​中,因此在6和7之间交换元素相当于在7之前插入6。

在这里插入图片描述
第三个元素是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^2n=n2

选择排序

原理:选择排序选择未排序数组开头最小的一个。

在这里插入图片描述

如图所示,从数组中选择最小的1,将其放置在数组的起始位置,则该位置将被视为已排序的数组,然后从剩余数​​组中选择最小的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]+",");
        }
    }
}
. . .

相关推荐

额外说明

深度学习学习笔记——模型修改与CRUD

目录 1.打印模型,理解模型结构 2.模型保存与加载 3.模型的模块CRUD和模块的层的CRUD 1.打印模型,理解模型结构 import torch class MyModel(torch.nn.Module): def __init__(

额外说明

【错误报告:字符串类型转换int】java.lang.NumberFormatException: 对于输入字符串:

算法学习错误记录 今天在写力扣题目加一时,出现错误,string转int出错, 一般有三种情况, 1.字符串前后有空格,使用str.trim()去前后 2.字符串中间有空格, 3.输入数大于int类型长度,int max=2147483647 int m

额外说明

如何学习ue开发

学习UE(Unreal Engine)开发需要具备一定的编程基础和计算机图形学基础。 以下是一些步骤和资源,帮助您入门UE开发: 1、学习C++编程语言 UE是基于C++编程语言开发的,因此学习C++编程语言是入门UE开发的第一步。可以通过学习相关的书籍

额外说明

android ajax 跨域更新本地html,本地webapp是怎么解决跨域问题的?

像ionic的cli,都可以把一个ionic的webapp打包成本地的,那这样的话是如何解决跨域问题的? 在PC上,我直接访问连接获取数据,代码如下。(抄自W3School) function loadXMLDoc() { var xmlhttp; if

额外说明

Visual Studio Code安装详细教程

win电脑可以打开该网址 vs官方下载网站 点击这里免费下载 下载下来是一个安装程序,直接以管理员身份运行即可 我同意安装,然后选择D盘的一个空间进行安装 然后点击下一步 安装如图所示勾选,点击下一步 点击安装 等待安装完成即可 打开之后就是欢迎界面信息

额外说明

Java基础之lambda表达式(JDK1.8新特性)

文章目录 Lambda表达式 各种函数式接口 Lambda的语法 Lambda 表达实例 举例说明 变量作用域 处理lambda 表达式 变量作用域 函数式接口 使用实例1 使用实例2 使用示例3(集合排序) 使用示例4(按照对象属性给list排序) 使

额外说明

【yolov1】详解yolov1理论 & 代码

目标检测要解决的3大问题: 1、有没有? 图片中是否有要检测的物体?(检测物体,判定前景背景) 2、是什么? 这些物体分别是什么?(检测到的物体是什么) 3、在哪里? 这些物体在哪里?(画框,描边,变色都行) yolov1模型图 一.预测阶段 1.2 预

额外说明

SpringCloud Gateway网关为认证中心和用户微服务构建统一的认证授权入口

本文主要内容是通过SpringCloud Gateway构建一个网关微服务,作为统一的认证授权和访问入口。 配置文件 先引入相关依赖,对应的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <projec

额外说明

小型软件企业 出路_6个适用于小型企业的最佳会计软件(比较)

小型软件公司的出路 WPBeginner 上的很多读者都是网络专业人士,我们最近收到的问题之一是:哪一个是最适合网络专业人士的会计软件?开展自己的业务需要您维护账户、跟踪收入、费用、税款、发票等。幸运的是,有一些非常出色的软件可以帮助您简化该过程。在本文

额外说明

display的flex属性使用详解

display的flex属性使用详解 Flex的兼容性在PC端相当广泛,但在移动端则不然。今天我们只是学习,忽略了一些不重要的事情。 首先,使用flex需要一个父容器,父容器中有多个项目。 父容器:容器 属性:   展示:flex;/*flex块级,in

ads via 小工具