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;
}
posted @   站着说话不腰疼  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
点击右上角即可分享
微信分享提示