图解选择排序算法及优化

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

文章目录

  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)
  在选择排序中,每趟都会选出最大元素与最小元素,然后与两端元素交换,此时,待排序序列中如果存在与原来两端元素相等的元素,稳定性就可能被破坏

相关文章
|
2天前
|
机器学习/深度学习 资源调度 算法
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
6天前
|
算法 数据安全/隐私保护
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
|
7天前
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
9天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
12天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法matlab仿真
本项目基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法,实现MATLAB仿真,并对比Kawasaki sampler、IMExpert、IMUnif和IMBayesOpt四种方法。核心在于利用历史采样信息动态调整MCMC参数,以高效探索复杂概率分布。完整程序在MATLAB2022A上运行,展示T1-T7结果,无水印。该算法结合贝叶斯优化与MCMC技术,通过代理模型和采集函数优化采样效率。
|
12天前
|
机器学习/深度学习 存储 算法
量子算法的设计与优化:迈向量子计算的未来
量子算法的设计与优化:迈向量子计算的未来
46 3
|
14天前
|
数据采集 人工智能 编解码
算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
BlueLM-V-3B是由vivo与香港中文大学共同研发的多模态大型语言模型,专为移动设备优化。它通过算法和系统协同优化,实现了高效部署和快速生成速度(24.4 token/s),并在OpenCompass基准测试中取得优异成绩(66.1分)。模型小巧,语言部分含27亿参数,视觉编码器含4000万参数,适合移动设备使用。尽管如此,低端设备可能仍面临资源压力,实际应用效果需进一步验证。论文链接:https://arxiv.org/abs/2411.10640。
37 9
|
14天前
|
算法 数据安全/隐私保护 索引
基于GWO灰狼优化的多目标优化算法matlab仿真
本程序基于灰狼优化(GWO)算法实现多目标优化,适用于2个目标函数的MATLAB仿真。使用MATLAB2022A版本运行,迭代1000次后无水印输出结果。GWO通过模拟灰狼的社会层级和狩猎行为,有效搜索解空间,找到帕累托最优解集。核心步骤包括初始化狼群、更新领导者位置及适应值计算,确保高效探索多目标优化问题。该方法适用于工程、经济等领域复杂决策问题。
|
15天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。

热门文章

最新文章