当前位置: 首页 > news >正文

Java-排序~查找算法

1 冒泡排序

  • 冒泡排序 : 将一组数据按照从小到大的顺序进行排序

  • 冒泡排序原理 : 相邻元素两两作比较 , 大的元素往后放


/*冒泡排序 : 将一组数据按照从小到大的顺序进行排序冒泡排序的原理 : 相邻元素两两作比较 , 大的元素往后放需求 : 将数组中的元素 {3,5,2,1,4} 进行升序排序*/
public class SortDemo {public static void main(String[] args) {int[] arr = {3, 5, 2, 1, 4};for (int j = 0; j < arr.length - 1; j++) {// 比较的轮次// 每轮相邻元素比较的次数for (int i = 0; i < arr.length - 1 - j; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}System.out.println("第" + (j + 1) + "轮排序:" + Arrays.toString(arr));}}
}

2 选择排序

  • 选择排序原理 : 它的工作原理是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

  • 注意事项 :

    • 有n个元素,那么就要比较n-1轮次。

    • 每一趟中都会选出一个最值元素,较前一趟少比较一次

      /*选择排序工作原理 :它的工作原理是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。注意 :1 有n个元素,那么就要比较n-1趟。2 每一趟中都会选出一个最值元素,较前一趟少比较一次*/import java.util.Arrays;public class SortDemo {public static void main(String[] args) {int[] arr = {4, 1, 5, 3, 2};// 遍历数组for (int i = 0; i < arr.length - 1; i++) {// 记录当前元素和其之后所有元素的最小值索引int minIndex = i;int min = arr[i];for (int j = i; j < arr.length; j++) {if (arr[j] < min) {minIndex = j; //  把当前最小值的索引赋值给minIndexmin = arr[j];// 替换最小值}}if (i != minIndex) {int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}System.out.println(Arrays.toString(arr));}
      }
      

      3 二分查找

    • 原理 : 每次去掉一般的查找范围

    • 前提 : 数组必须有序

      package com.itheima.arraysort_demo.binarysearch_demo;/*二分查找 :原理 : 每次去掉一般的查找范围前提 : 数组必须有序步骤 :1,定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引2,循环查找,但是min <= max3,计算出mid的值4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引5,如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找6,如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找7,当 min > max 时,表示要查找的元素在数组中不存在,返回-1.*/
      public class BinarySearchDemo {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int i = binarySearch(arr, 8);System.out.println(i);}public static int binarySearch(int[] arr, int num) {// 定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引int max = arr.length - 1;int min = 0;// 2,循环查找,但是min <= maxwhile (min <= max) {// 3,计算出mid的值int mid = (min + max) / 2;if (arr[mid] == num) {//  4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引return mid;} else if (arr[mid] > num) {// 5,如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找max = mid - 1;} else if (arr[mid] < num) {// 6,如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找min = mid + 1;}}return -1;}
      }
      

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt会议室项目
  • 景区导航导览系统:基于AR技术+VR技术的功能效益全面解析
  • RocketMQ实现分布式事务
  • vst 算法R语言手工实现 | Seurat 筛选高变基因的算法
  • 优化Python爬虫:多线程助力数据采集高速通道
  • vue仿甘特图开发工程施工进度表
  • openeuler 终端中文显示乱码、linux vim中文乱码
  • Billu_b0x靶机
  • Hadoop中的YARN组件
  • 计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)
  • 鸿蒙语言基础类库:【@system.brightness (屏幕亮度)】
  • 【Python】Python-docx使用实例 科技档案封面批量生成
  • CollectionUtils的使用
  • Python实现发票信息识别
  • 编译打包自己的云手机(redroid)镜像
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android 控件背景颜色处理
  • Angular4 模板式表单用法以及验证
  • ES6语法详解(一)
  • exports和module.exports
  • fetch 从初识到应用
  • java8-模拟hadoop
  • javascript数组去重/查找/插入/删除
  • java概述
  • Markdown 语法简单说明
  • MYSQL 的 IF 函数
  • Vue 2.3、2.4 知识点小结
  • 包装类对象
  • 解析带emoji和链接的聊天系统消息
  • 排序算法之--选择排序
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • hi-nginx-1.3.4编译安装
  • ​zookeeper集群配置与启动
  • # Redis 入门到精通(九)-- 主从复制(1)
  • ## 基础知识
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #图像处理
  • (04)odoo视图操作
  • (11)MATLAB PCA+SVM 人脸识别
  • (2)nginx 安装、启停
  • (void) (_x == _y)的作用
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • *** 2003
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Reactor简单使用教程
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET轻量级ORM组件Dapper葵花宝典
  • .Net转Java自学之路—基础巩固篇十三(集合)