Java代码实现选择排序:直接选择排序和堆排序
直接选择排序
第 i 次选取从 i 到 sorted.length - 1 之间的最小值 与 sorted[i] 进行位置交换(数组名为sorted)
堆排序
详细原理
https://blog.csdn.net/u010452388/article/details/81283998
代码实现:
public class SelectSort{
//直接选择排序(升序)
public static void straightSelectSort(int[] sorted){
int sortedLen = sorted.length;
//从第 i 次开始每次选取从 i 到 sorted.length - 1 之间的最小值
for(int i = 0;i < sortedLen;i++){
//先将未排序的序列的最左边的数据和位置存放起来 作为未排序序列的目前最小值
int temp = sorted[i];
int position = i;
//创建一个哨兵从当前位置的右边开始循环寻找最小值
int j;
for(j = i + 1;j < sortedLen;j++){
//如果循环的数据比存放的数据小
if(sorted[j] < temp){
//那么将循环到的数据存放起来,替换目前最小值
temp = sorted[j];
//将该数据的位置替换先前的位置
position = j;
}
}
//将此循环找到的最小值 和 未排序的序列最左边的数据 位置交换
sorted[position] = sorted[i];
sorted[i] = temp;
}
}
//直接选择排序结束
//堆排序(升序)
public static void heapSort(int[] sorted){
int sortedLen = sorted.length;
//构造大根堆
for(int i = 0;i < sortedLen;i++){
//获取当前结点索引,以及父结点
int currentIndex = i;
int fatherIndex = (currentIndex - 1) / 2;
//如果子结点大于父结点,那么交换父子结点的位置
//并以交换后的父结点作为子结点,继续与其父结点比较
while(sorted[currentIndex] > sorted[fatherIndex]){
int temp = sorted[currentIndex];
sorted[currentIndex] = sorted[fatherIndex];
sorted[fatherIndex] = temp;
currentIndex = fatherIndex;
fatherIndex = (currentIndex - 1) / 2;
}
}
//交换大根堆的最大值和尾结点
while(sortedLen > 1){
int max = sorted[0];
sorted[0] = sorted[sortedLen - 1];
sorted[sortedLen] = max;
//固定最大值
sortedLen--;
//将剩余的数据重新构造大根堆
for(int i = 0;i < sortedLen;i++){
//获取当前结点索引,以及父结点
int currentIndex = i;
int fatherIndex = (currentIndex - 1) / 2;
//如果子结点大于父结点,那么交换父子结点的位置
//并以交换后的父结点作为子结点,继续与其父结点比较
while(sorted[currentIndex] > sorted[fatherIndex]){
int temp = sorted[currentIndex];
sorted[currentIndex] = sorted[fatherIndex];
sorted[fatherIndex] = temp;
currentIndex = fatherIndex;
fatherIndex = (currentIndex - 1) / 2;
}
}
}
}
//堆排序结束
//测试
public static void main(String[] args) {
int[] sort = new int[10];
sort[0] = 2;
sort[1] = 88;
sort[2] = 1;
sort[3] = 8;
sort[4] = 7;
sort[5] = 38;
sort[6] = 28;
sort[7] = 72;
sort[8] = 76;
sort[9] = 0;
System.out.println("Before Sort:");
System.out.println(Arrays.toString(sort));
SelectSort.heapSort(sort);
System.out.println("After Sort:");
System.out.print(Arrays.toString(sort));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗