当前位置: 首页 > 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.lryc.cn/news/591682.html

相关文章:

  • 力扣 hot100 Day47
  • 网络安全威胁下的企业困境与破局技术实践
  • Linux内核内存管理相关的配置参数
  • 电商行业如何做好网络安全工作?
  • 【web安全】DVWA反射型XSS漏洞分析与利用
  • RGBA图片格式转换为RGB格式(解决convert转换的失真问题)
  • 利用node.js在本地搭建简易http服务器
  • 快慢指针的应用
  • RCU机制及常见锁的理解
  • web安全入门 | 记新手小白初次尝试挖越权漏洞
  • Ansible AWX 自动化运维
  • 3t车用手动卧式千斤顶设计含8张CAD图纸PDF图
  • parallels desktop windows win10无法复制文件无法共享剪切板
  • [NIPST AI]对抗性机器学习攻击和缓解的分类和术语
  • RocketMq集群高可用
  • Java并发编程第三篇(深入解析Synchronized)
  • 系统引导修复(2)
  • 《Java语言程序设计》1.2.5 复习题
  • Spring Boot 分层架构详解:Controller、Service、Mapper...
  • SLG 游戏如何进行防破解和防盗版保护?
  • 《迭代器 VS 生成器:Python 惰性计算的两种实现方案详解》
  • Scrapy无缝集成Pyppeteer:异步无头浏览器爬虫架构实战
  • 中科固源深度解析:DoIP 协议原理、应用与安全防护全流程
  • cnpm命令报internal/modules/cjs/loader.js:797 throw err; ^ Error: Cannot find
  • 第12章 存储类、链接和内存管理
  • python学智能算法(二十二)|SVM-点与超平面的距离
  • Adam优化器
  • 深入理解 KVM 子系统:从虚拟化核心到内核实现的全景解析
  • js对象简介、内置对象
  • 【中等】题解力扣21:合并两个有序链表