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

Java数组中相关查找排序算法(1)

一、冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。(相邻对比交换位置)

这里依旧通过代码练习来实现:

package com.easy2;import java.util.Arrays;public class EasyF {public static void main(String[] args) {//排序//冒泡排序 快速排序 选择排序 插入排序//冒泡排序***********int[] arr={111,45,73,82,44};int temp;for(int j=0;j<arr.length-1;j++) {//确定了几个最大值for (int i = 0; i < arr.length -j-1; i++) {//元素下标//当前元素 arr[i]//下一个元素 arr[i+1]if (arr[i] > arr[i + 1]) {//交换位置 交换值temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}}System.out.println(Arrays.toString(arr));}
}

二、快速排序

与冒泡排序有着紧密联系的就是快速排序

快速排序的基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

依旧见代码:

package com.easy2;
import java.util.Arrays;
public class EasyG {public static void main(String[] args) {//快速排序int[] arr={9,8,3,5,2};sort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr,int begin,int end){//如果区间不只一个数if(begin<end){int temp=arr[begin];//设置数组的开始元素为基准值int i=begin;//从左向右的左指针,指示当前左位置int j=end;//从右向左的右指针,指示当前右位置//不重复遍历while(i<j){//当右边的数大于基准数时,略过,继续查找while(i<j&&arr[j]>temp){j--;}//右边小于基准数的值填入左边arr[i]=arr[j];//当左边的数小于基准数时,略过,继续查找while(i<j&&arr[i]<temp){i++;}//左边大于基准数的值填入右边arr[j]=arr[i];}arr[i]=temp;//或者arr[j]也行,此时ij下标重合sort(arr,begin,i-1);//一个递归sort(arr,i+1,end);//两个递归}//如果区间只有一个数,返回elsereturn;}
}

三、选择排序

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。(拿出最大或最小,然后在剩余中再拿最大或最小)

见代码:

package com.easy2;import java.util.Arrays;public class EasyH {public static void main(String[] args) {//选择排序//选择最大或最小,最菜的出来int[] arr={9,8,3,5,2};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] array){//这里是找最小,并交换//每次都把最小的交换到前面,即可排好序int length = array.length;for(int i = 0; i < length; i++){int minIndex = i;for(int j = i + 1; j < length; j++){if(array[j] < array[minIndex]){minIndex = j;}}int temp = array[i];array[i] = array[minIndex];array[minIndex] = temp;}}
}

四、插入排序

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。(将未排序的,在已排序中找到位置插进去)

package com.easy2;import java.util.Arrays;public class EasyI {//插入排序public static void main(String[] args) {int[] arr={9,8,3,5,2};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr){int temp,j;for(int i=0;i<arr.length;i++){temp=arr[i];//先存储最开始arr[i]的值for(j=i-1;j>=0&&arr[j]>temp;j--){arr[j+1]=arr[j];}//j--后面间接交换了两个值arr[j+1]=temp;}}
}

五、二分查找算法:

二分查找法
返回要查找数据的下标,如果没有找到,则返回-1
只能处理已经排序好的序列

见代码及注释:

package com.easy2;
public class EasyJ {//二分查找法//返回要查找数据的下标,如果没有找到,则返回-1//只能处理已经排序好的序列public static void main(String[] args) {int[] arr={1,2,3,4,5,8,10,13,18,22,47,49,66,78};int dest=66;int result = binarySearch(arr, dest);if(result == -1) {System.out.println("未找到元素 " + dest);} else {System.out.println("元素 " + dest + " 的下标是: " + result);}}public static int binarySearch(int[] arr, int dest) {int left=0;int right=arr.length-1;while(left<=right){int mid=(left+right)/2;//整数运算结果是整数if(arr[mid]==dest){return mid;}else if(arr[mid]>dest){right=mid-1;}else if(arr[mid]<dest){left=mid+1;}}return -1;}
}

 

http://www.dtcms.com/a/284372.html

相关文章:

  • 密码管理安全防御
  • Servlet概述
  • Hive常用命令总结
  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局
  • springboot打包二次压缩Excel导致损坏
  • 从零开始实现一个简单的 RPC 框架(Java 版)
  • uniapp运行鸿蒙报错整理
  • 25年7月最新版本利用标准算法库对医保服务平台js逆向之signData进行分析
  • SiLM6000S:高集成智能光伏关断器,集成SunSpec PLC接收,助力安全合规
  • python Flask 框架入门
  • Kotlin 属性委托 observable 的实现原理
  • 使用Leaflet实现地图高亮点标记功能 渲染本地icon图片
  • 集成算法学习学习
  • Qt 监控串口设备热插拔的方法
  • javaweb学习开发代码_HTML-CSS-JS
  • [RAG] 文档格式化 | 知识库摄入 | VectorDB.faiss | BM25索引.pkl
  • 松材线虫检测仪在林业的作用
  • 【Lua】题目小练1
  • 九学王资源apk应用名称整理
  • 【机器学习实战【七】】机器学习特征选定与评估
  • ELN:生物医药科研的数字化引擎——衍因科技引领高效创新
  • 多线程(一) --- 线程的基础知识
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • Oracle 19.28 RU 升级最佳实践指南
  • 装饰器模式及优化
  • 大模型Agent应用开发实战:从框架选型到行业落地
  • 十六进制与嵌入式系统及通信系统
  • yolo8+ASR+NLP+TTS(视觉语音助手)
  • 基于Rust Softplus 函数实践方法
  • 【通识】网络的基础知识