数组相关算法(冒泡排序、选择排序、二分查找)
1、冒泡排序
冒泡由小到大排序思路:从前向后进行两两比较,如果前面的数大于后面的数就交换。
package cn.lwj0126.javase.array.test; //冒泡排序 public class BubbleSorting { public static void main(String[] args) { int[] data = {77,44,66,33,55,11}; for (int x=0; x < data.length-1; x++) { //对于 n 个数的数组,需要比较 n-1 轮 for (int j = 0; j < data.length-1-x; j++) { if (data[j] > data[j+1]) { int t = data[j]; data[j] = data[j+1]; data[j+1] = t; } } } //打印结果 for (int a : data) { System.out.print(a+"\t"); } } }
输出结果:11 33 44 55 66 77
2、选择排序
选择由小到大排序思路:从当前的数中选择最小的交换到前面。
package cn.lwj0126.javase.array.test; //选择排序:找出每轮最小的交换到前面 public class SelectionSorting { public static void main(String[] args) { int[] data = {77,44,66,33,55,11}; selectionSort(data); for (int a : data ) { System.out.print(a+"\t"); } } public static void selectionSort(int[] data){ for (int i = 0; i < data.length-1; i++) {//有n个数的数组,进行n-1轮选择 int index = i; //最小元素的下标 for (int j = i; j < data.length-1; j++) { if (data[j] > data[j+1]){ index = j+1; } } swap(data , i , index); } } public static void swap(int[] data , int i , int index){ int temp = data[i]; data[i] = data[index]; data[index] = temp; } } 执行结果:11 33 44 55 66 77
3、二分查找
二分查找的前提是数组已经由小到大排序。二分查找思路是始终与中间的元素比较大小,如果要查找的元素小于中间数,查找范围缩小到左一半;如果要查找的元素比中间的元素大,把查找范围缩小到右一半。
不会写?java.util.Arrays 类已提供了 binarySearch(int[] a, int key) 方法,在 a数组中采用二分查找,返回 key元素的索引值。
package cn.lwj0126.javase.array.test; import java.util.Arrays; public class BinarySeaching { public static void main(String[] args) { int[] data = {11,77,33,44,22,66}; Arrays.sort(data); //数组排序,升序 System.out.println("排序后:" + Arrays.toString(data)); int a = binarySeach(data,33); //比如查找33 if (a == -1) System.out.println("没找到"); else System.out.println("索引位置:" + a); } public static int binarySeach(int[] data , int key){ int from = 0; int end = data.length-1; while(from <= end){ int mid = (from + end) / 2; if (key == data[mid]) //正好中间 return mid; else if(key < data[mid]) //中间偏左 end = mid - 1; else //中间偏右 from = mid + 1; } return -1; } } 执行结果: 排序后:[11, 22, 33, 44, 66, 77] 索引位置:2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)