1、排序算法
排序算法
冒泡排序
算法思路:用第一个作为开始,每次前一个跟后一个作比较,每次循环都能得出一个最大值或最小值。
(从小到大:就是第一个比第二个小,所以当第一个大于第二个时交换位置。从大到小则相反。)
//冒泡排序的方法 public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { //从第二个开始 for (int j = i+1; j < arr.length; j++) { //前一个跟后一个作比较 if(arr[i]<arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } }
插入排序
算法思路:从第二位置开始插入,每次比较该位置之前的数据,如果当前数据比位置数据大,将数据往后移,否则,就将数据放在比自己小的前一个位置。
//插入排序 public static void insertSort(int[] arr) { //定义一个临时变量 int temp = 0; //从第二个开始 for (int i = 1; i < arr.length; i++) { //将第二个值存储起来 temp = arr[i]; //拿到前一个 int j = i-1; while (j >= 0) { //当前数据跟位置数据比较 if(arr[j] > temp) { arr[j+1] = arr[j];//比较完后数据往后移 }else { break; } j--; } //(j的值是将arr[j+1] = arr[j];中的arr[j]的数据加回去)找到插入位置,将temp插入 arr[j+1] = temp; } }
选择排序
算法思路:用一个临时的值记录最大或最小值的索引,每次找到一个最大值或最小值的索引,然后判断当前索引跟当前循环的是否相同,如果不同就交换值。
//算法排序 public static void selectSort(int[] arr) { for (int i = 0; i < arr.length; i++) { //用来记录最小值的下标 int minIndex = i; for (int j = i+1; j < arr.length; j++) { //找到最小值的下标 if(arr[minIndex] > arr[j]) { //将最小值的坐标交换 minIndex = j; } } //如果发现最小值的下标不是当前的下标,就交换位置 if(minIndex != i) { int temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } } }
快速排序
算法思路:定义左右下标,以最后一个数据作为参照物,左坐标从数据的最左边开始,右坐标从数据的前一个开始,左坐标从左往右开始的找第一个比参照物大的值,右坐标从右往左第一个找比参照物小的值。。判断:如果左坐标和右坐标没有交叉,则交换左右的值,如果交叉,交换左坐标跟参照物的值。并把左坐标分成两半。
//快速排序 public static void quickSort(int[] arr,int start,int end) { //判断是否交叉 if(start >= end) { return; }else { //中间值 int middle = findMiddle(arr,start,end); //数据分成两边 quickSort(arr, start, middle-1); quickSort(arr, middle+1, end); } } //查找中间值 private static int findMiddle(int[] arr,int start,int end) { //参照物 int temp = arr[end]; //左坐标 int left = start; //右坐标 int right = end-1; //循环找位置 while (true) { //从左边找,第一个比参照物大的值 while (left < end && arr[left] <= temp) left++; if (left == end) break;//参照物是最大的 //从右边找,第一个比参照物小的 while(right < start && arr[right]>= temp) right--; //判断是否交叉 if (left < right) { //没有交叉 change(arr,left,right); continue; }else { //有交叉 change(arr, left, end); break; } } return left; } //交换的方法 private static void change(int[] arr,int from, int to) { int temp = arr[from]; arr[from] = arr[to]; arr[to] = temp; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!