图解选择排序算法及优化

简介: 图解选择排序算法及优化

文章目录

  1. 算法思想
  2. 算法图解
  3. 代码实现
  4. 选择排序算法的优化
  5. 选择排序特点
  6. 算法思想
  1. 算法图解

以数组array图解选择排序,排序结果为升序

int[] array = {25,33,10,15,70,45};

 假设每个循环开始第一个数是总是最小,minIndex保存最小数的下标i,i范围:从0开始到array.length-1

开始遍历数组,找到最小的数,将索引保存并且交换最小数和当前minIndex所指向的数

 假设最小数是33,开始向后遍历,找到最小数15,交换

 继续循环,25当前是最小,自己和自己交换

  继续循环,33当前是最小,自己和自己交换

 继续循环,最小数是45,和70交换

  继续循环,70当前是最小,自己和自己交换

至此排序完成

  1. 代码实现

import java.util.Arrays;

public class ChoiceSort{

public int[] sortArray(int[] nums){
    if(nums.length == 0){
        return nums;
    }
    for (int i = 0; i < nums.length; i++) {
        int minIndex = i;//最小数的下标,每个循环开始总是假设第一个数是最小数
        for (int j = i; j < nums.length; j++) {
            if (nums[j] < nums[minIndex]){//找到最小数
                minIndex = j;//保存最小数索引
            }
        }
        System.out.println("本轮最小数:"+nums[minIndex]);
        //交换最小数和当前i所指向的元素
        int tmp = nums[minIndex];
        nums[minIndex] = nums[i];
        nums[i] = tmp;
        PrintArray.print(nums);
        System.out.println("————————————————");
    }
    return nums;
}
public static void main(String[] args) {
    int[] array = {25,33,10,15,70,45};
    System.out.println("初始数组:");
    PrintArray.print(array);
    ChoiceSort choiceSort = new ChoiceSort();
    choiceSort.sortArray(array);
    System.out.println("排序完成");
    PrintArray.print(array);
}

}
class PrintArray{

public static void print(int[] array){
    System.out.println(Arrays.toString(array));
}

}
结果:

  1. 选择排序算法的优化

思路:一般是在一趟遍历中,同时找出最大值与最小值,放到数组两端,这样就能将遍历的趟数减少一半

遍历数组找到最大值和最小值 , 将最小值放到数组left处,将最大值放到数组right处,然后继续重复操作,直至排序完成

代码: 

import java.util.Arrays;

public class ChoiceSort{

public int[] sortArray(int[] nums) {
    if (nums.length == 0) {
        return nums;
    }
    /*初始化左端、右端元素索引*/
    int left = 0;
    int right = nums.length - 1;
    while (left < right) {
        /*初始化最小值、最大值元素的索引*/
        int min = left;
        int max = right;
        for (int i = left; i <= right; i++) {
            /*标记每趟比较中最大值和最小值的元素对应的索引min、max*/
            if (nums[i] < nums[min])
                min = i;
            if (nums[i] > nums[max])
                max = i;
        }
        /*最大值放在最右端*/
        int temp = nums[max];
        nums[max] = nums[right];
        nums[right] = temp;
        /*此处是先排最大值的位置,所以得考虑最小值(arr[min])在最大位置(right)的情况*/
        if (min == right)
            min = max;
        /*最小值放在最左端*/
        temp = nums[min];
        nums[min] = nums[left];
        nums[left] = temp;
        /*每趟遍历,元素总个数减少2,左右端各减少1,left和right索引分别向内移动1*/
        left++;
        right--;
    }

    return nums;
}
public static void main(String[] args) {
    int[] array = {25,33,10,15,70,45};
    System.out.println("初始数组:");
    PrintArray.print(array);
    ChoiceSort choiceSort = new ChoiceSort();
    choiceSort.sortArray(array);
    System.out.println("排序完成");
    PrintArray.print(array);
}

}
class PrintArray{

public static void print(int[] array){
    System.out.println(Arrays.toString(array));
}

}
结果: 

  1. 选择排序特点

        待排序序列中,元素个数较少时,适合选用选择排序,时间复杂度为O(n2)
  在选择排序中,每趟都会选出最大元素与最小元素,然后与两端元素交换,此时,待排序序列中如果存在与原来两端元素相等的元素,稳定性就可能被破坏

相关文章
|
12天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
2月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
152 68
|
19天前
|
机器学习/深度学习 存储 算法
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
161 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
|
3天前
|
数据采集 人工智能 编解码
算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
BlueLM-V-3B是由vivo与香港中文大学共同研发的多模态大型语言模型,专为移动设备优化。它通过算法和系统协同优化,实现了高效部署和快速生成速度(24.4 token/s),并在OpenCompass基准测试中取得优异成绩(66.1分)。模型小巧,语言部分含27亿参数,视觉编码器含4000万参数,适合移动设备使用。尽管如此,低端设备可能仍面临资源压力,实际应用效果需进一步验证。论文链接:https://arxiv.org/abs/2411.10640。
21 9
|
12天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
15天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1天前
|
机器学习/深度学习 存储 算法
量子算法的设计与优化:迈向量子计算的未来
量子算法的设计与优化:迈向量子计算的未来
20 3
|
4天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
3天前
|
算法 数据安全/隐私保护 索引
基于GWO灰狼优化的多目标优化算法matlab仿真
本程序基于灰狼优化(GWO)算法实现多目标优化,适用于2个目标函数的MATLAB仿真。使用MATLAB2022A版本运行,迭代1000次后无水印输出结果。GWO通过模拟灰狼的社会层级和狩猎行为,有效搜索解空间,找到帕累托最优解集。核心步骤包括初始化狼群、更新领导者位置及适应值计算,确保高效探索多目标优化问题。该方法适用于工程、经济等领域复杂决策问题。
|
13天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。