面试必懂之数组排序法总结

2023-11-04

1、-------寄语

    大家在理解的过程中,可以先理解排序的原理,然后按照自己的理解用代码的方式去实现;在写代码的过程中,必要时可以自己去据一个简单一点的数组,在脑海中想想排序的过程,也可以一步一步打印,看结果。这篇文章是我在网上找的,有原理图,但是原文中原理图有些错误,容易造成误导,所以我在下面的图中做了更改。

这是原文:http://www.cnblogs.com/taotingkai/p/6214367.html,大家也可以直接看我这篇文章,做了部分修改,更加好理解

    

2、-------分析+代码

   我们学习它是学一种思想,以后的业务逻辑中可能会用到,可能会有相似的逻辑或者培养了我们这种思想,我们今后可以举一反三。不要为了题目而题目,说了一些题外话,不好意思,言归正传。

   (1)选择排序(从小到大)

         1)思想:选择排序,让数组中的每一个数,依次与后面的数进行比较,如果前面的数大于后面的数,就进行位置的交换。这种说法或许有些人看不明白。换个说法,选择排序:第一个数依次与后面的数比较,第一次比较完之后最小的数在最前面 (即选择出最小的)。

          不理解的看看图应该就差不多了,真不明白就和明白的人讨论讨论吧。

             


  (2)冒泡排序(从小到大)    

         1)思想:相邻两个数进行比较,第一波比较后,最大的数在最后。(每比较完之后,后面的数就减少一个比较 )

             

注意:这里是的最后一句话,应该改为"一直比较,最后一个是9,然后再从3开始第二轮冒泡,重复上面的步骤,但经过第一轮冒泡,最大的一个数已经被排到最后面了,所以没必要再比较最后一个数,但是比较了也无所谓"。


(3)插入排序

  插入排序在面试中考得比较少,这里不做详细解释,参照代码流程,自己画画流程图就懂了。      


代码:

public class ArrayTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr1= {12,10,33,40,8,22,1,4,17,66,43,28};
		selectSort1(arr1);//选择排序/也有人说这是冒泡
		System.out.println("============================");
		selectSort(arr1);//选择
		System.out.println("=========================");
		maoPao(arr1);//冒泡
		System.out.println("============================");
		insertSort(arr1);//插入
	}
	
	/**
	 * 选择排序
	 */
	public static void selectSort(int[] arr) {
		int num=0;
		for(int i=1;i<arr.length;i++) {
			int minIndex=i;
			for(int j=i;j<arr.length-1;j++) {
				num++;
				if(arr[minIndex]>arr[j]) {
					minIndex = j;
				}
			}
			if(minIndex != i) {
				int temp=arr[i];
				arr[i]=arr[minIndex];
				arr[minIndex]=temp;
			}
		}
		for (int a : arr) {
			System.out.print(a+" ");
		}
		System.out.println();
		System.out.println(num);
	}
	
	
	/**
	 * 选择排序
	 * @param arr
	 */
	public static void selectSort1(int[] arr) {
		int num=0;
		for(int i=0;i<arr.length-1;i++) {
			for(int j=i;j<arr.length-1;j++) {
				int temp;
				num++;
				if(arr[i]>arr[j+1]) {
					temp=arr[i];
					arr[i]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
		for (int a : arr) {
			System.out.print(a+" ");
		}
		System.out.println();
		System.out.println(num);
	}
	
	/**
	 * 冒泡排序{12,10,20,9}-{10,12,9,20}-{10,9,12,20}
	 * @param arr
	 */
	public static void maoPao(int[]arr) {
		int num=0;
		for(int i=1;i<arr.length;i++) {
			for(int j=0;j<arr.length-i;j++) {
				int temp;
				num++;
				if(arr[j]>arr[j+1]) {
					temp=arr[j+1];
					arr[j+1]=arr[j];
					arr[j]=temp;	
				}
			}
		}
		for (int a : arr) {
			System.out.print(a+" ");
		}
		System.out.println();
		System.out.println(num);
	}
	
	/**
	 * 插入排序法
	 */
	public static void insertSort (int[] arr) {
		int num=0;
		for(int i=1;i<arr.length;i++) {
			for(int j=i;j>0;j--) {
				num++;
				if(arr[j-1]>arr[j]) {
					int temp=arr[j];
					arr[j]=arr[j-1];
	


控制台输出:(原数组{12,10,33,40,8,22,1,4,17,66,43,28})

1 4 8 10 12 17 22 28 33 40 43 66 
66
============================
1 4 8 10 12 17 22 28 33 40 43 66 
55
=========================
1 4 8 10 12 17 22 28 33 40 43 66 
66
============================
1 4 8 10 12 17 22 28 33 40 43 66 
66

红色字体是我想看看一共进行了多少轮比较。



疑问:在这里我提出我小小的疑问,在我的方法中有个selectSort1(int []);大家帮我看看这是属于冒泡还是选择,在这里我把它归为选择一类,但也有人说这是冒泡,大家帮我看看,发表一下看法,相互进步

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

面试必懂之数组排序法总结 的相关文章

  • Linux配置Java环境

    使用jdk压缩包方式配置Java环境 1 上传jdk到linux 在linux中软件一般安装到 usr local目录中 2 将jdk解压 解压命令 tar zxvf jdk 8u301 linux x64 tar gz 将解压后的jdk改
  • strictfp关键字

    strictfp的意思是FP strict 也就是说精确浮点的意思 在Java虚拟机进行浮点运算时 如果没有指定strictfp关键字时 Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作 以致于得
  • Android动态权限申请框架

    XmPermissions 项目介绍 Android动态权限申请框架 Github地址 https github com lhm0603 XmPermissionsProject 使用说明 XmPermissions 支持 Android
  • 基本数据类型对象包装类

    基本数据类型对象包装类 为了方便操作基本数据类型值 将其封装成了对象 在对象中定义了属性和行为丰富了该数据的操作 用于描述该对象的类就称为基本数据类型包装类 byte Byte short Short int Integer long Lo
  • Java 常用命令、文档注释、命令行参数

    目录 注释 常用命令 生成API文档 命令行参数 注释 单行注释 多 行 注 释 文档注释 一般标注在类 接口 对外暴露的成员上 描述功能 使用说明 订单业务服务 author chy xxx xxx com version 1 0 sin
  • 哪吒社区 - 风火轮计划

    目录 风火轮计划 全新起航 风火轮计划内容 一 Java零基础入门 二 Java基础教程系列 三 SpringBoot系列教程 加入方式 1 连续七天参与Java技能树每日打卡活动 2 发表一篇标题为 哪吒社区Java技能树 的学习博客 记
  • java中CompletableFuture异步编程详解以及实践案例

    文章目录 一 CompletableFuture的使用 1 创建CompletableFuture的方式 2 获得异步执行结果 3 对执行结果进行处理 4 对执行结果进行消费 5 异常处理 6 两组任务按顺序执行 7 两组任务谁快用谁 8
  • java - 面向对象程序的三大特性 封装、继承、多态

    目录 1 封装 1 1访问限定符 1 2包 1 3导入包中的类 1 4如何自定义包 1 5 包的访问权限控制举例 1 6 常见的包 1 7如果修改封装好的成员变量 2 继承 什么继承 子类中访问父类成员变量 子类和父类不存在同名成员变量 子
  • JAVA基础:线程池的使用

    目录 1 概述 2 线程池的优势 2 1 线程池为什么使用自定义方式 2 2 封装的线程池工具类有什么好处 3 线程池的七大参数 3 线程池的创建 3 1 固定数量的线程池 3 2 带缓存的线程池 3 3 执 定时任务 3 4 定时任务单线
  • Idea快捷键大全(Windows)

    一 知道类名查找类 1 Ctrl Shift Alt N 2 双击Shift 二 查找类中所有方法 Ctrl F12 三 快速查找类或方法在整个项目中的位置 按住Ctrl键再点击类或方法会出现所有用到过的文件对象
  • 用户态和内核态的区别

    一 操作系统需要两种CPU状态 内核态 Kernel Mode 运行操作系统程序 操作硬件 用户态 User Mode 运行用户程序 二 指令划分 特权指令 只能由操作系统使用 用户程序不能使用的指令 举例 启动I O 内存清零 修改程序状
  • java基础知识点

    作者简介 哪吒 CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 专注Java硬核干货分享 立志做到Java赛道全网Top N 本文收录于 Java基础教程系列 目前已经700 订阅 CSDN最
  • java 16进制与图片互转

    十六进制转成图片 十六进制转成图片 author Administrator public static void saveToImgFile String src String output if src null src length
  • Java 高级语法学习笔记(基础)

    目录 反射机制 Class 类 类初始化 类加载 类的生命周期 七大阶段 1 加载 接入 class文件 2 验证 连接 linking 的第一阶段 为了安全 3 准备 分配内存及初步初始化 4 解析 字符翻译成引用阶段 5 初始化 代码正
  • 使用JAVA控制AD域进行基本的操作详解

    前段时间 我接到了一个新任务 使用JAVA控制AD域进行基本的操作 经几天摸索也看来多位博友的代码 现在摸索出了一套较为详细的Java操控AD域的方法 废话不多说 现进入正题 一 安装域控服务器 什么是域控服务器我就不多说了 请各位自行百度
  • 比较器

    Comparator比较器 Collcetion工具集中的sort public static
  • java实现文件读入、读出功能

    一 文档读取 1 将文件读取为String 2019 12 26 将文档打开 并将文档内容读入String中 public static String TxtToString File file String result try Buff
  • 编码问题

    编码 字符 gt 字节数组 解码 字节数组 gt 字符 编码 String str 你好 byte bus str getBytes UTF 8 解码 String str1 new String bus UTF 8 System out
  • 数据结构与集合之(1)ArrayList 与 Arrays

    数据结构是指逻辑意义上的数据组织方式及其处理方式 从 直接前驱 和 直接后继 个数的维度来看 大体可以将数据结构分为以下四类 1 线性结构 0 至 1 个直接前驱 和 直接后继 线性结构包括 顺序表 链表 栈 队列等 2 树结构 0 至 1
  • Java 简单修饰符补充学习笔记(基础)

    前言 顾名思义 这里是补充修饰符的学习笔记 通配符 顾名思义即可 const 常变量修饰符 首先const是constant 恒定不变的 的缩写 const 就是描述变量为常量的修饰符 关键字 或者说 const 是定义常变量的关键字 用

随机推荐