首页 > 编程语言 >选择排序算法之泛型优化

选择排序算法之泛型优化

时间:2023-05-25 20:36:58浏览次数:44  
标签:index arr 遍历 min int 算法 之泛 排序 public

选择排序算法

工作原理:

每一次从待排序的数据元素中选中最小的一个元素,然后,再从剩余未排序元素中继续寻找最小元素,将2个元素交换位置,就达到了已排序的元素一直是从小到大了。

这个算法的时间复杂度为O(n²),空间复杂度为O(1)。

/**
 * @Author: 翰林猿
 * @Description:选择排序
 **/
public class Select {
    public Select() {
    }
​
    public static void SelectionSort(int[] arr) {
        //i: 当前位置  j: 从当前位置开始增加的变量(用于从当前位置开始遍历,减少遍历量)
        for (int i = 0; i < arr.length; i++) {      //遍历数组,发现最小的,与当前的交换
            int min_index = i;                      //用于记录最小项的下标
            for (int j = i; j < arr.length; j++) {  //从当前位置开始遍历,找到最小的
                if (arr[min_index] > arr[j]) {       //如果最小项大于j处项
                    min_index = j;
                }
            }
            //到此为止,我们已经找到了比当前位置i小的最小项,将二者交换即可。
            swap(min_index, i, arr);
        }
    }
​
    public static void swap(int min_index, int i, int[] arr) {  
        int t = arr[min_index];
        arr[min_index] = arr[i];
        arr[i] = t;
    }
​
    public static void main(String[] args) {
        int[] arr = {1, 8, 9, 7, 3, 5, 6};
        Select.SelectionSort(arr);
        for (int it : arr) {
            System.out.println(it);
        }
    }
}

当然,为了匹配多种类型的对象,可以使用泛型匹配各类对象的排序

/**
 * @Author: 翰林猿
 * @Description:选择排序
 **/
public class Select {
    public Select() {
    }
​
    public static <E extends Comparable<E>>void SelectionSort(E[] arr) {        
        //i: 当前位置  j: 从当前位置开始增加的变量(用于从当前位置开始遍历,减少遍历量)
        for (int i = 0; i < arr.length; i++) {              //遍历数组,发现最小的,与当前的交换
            int min_index = i;                              //用于记录最小项的下标
            for (int j = i; j < arr.length; j++) {          //从当前位置开始遍历,找到最小的
                if (arr[min_index].compareTo(arr[j]) < 0) {       //如果最小项大于j处项
                    min_index = j;
                }
            }
            //到此为止,我们已经找到了比当前位置i小的最小项,将二者交换即可。
            swap(min_index, i, arr);
        }
    }
​
    public static <E> void swap(int min_index, int i, E[] arr) {
        E t = arr[min_index];
        arr[min_index] = arr[i];
        arr[i] = t;
    }
​
    public static void main(String[] args) {
        Integer[] arr = {1, 8, 9, 7, 3, 5, 6};
        Select.SelectionSort(arr);
        for (int it : arr) {
            System.out.println(it);
        }
    }
}

标签:index,arr,遍历,min,int,算法,之泛,排序,public
From: https://www.cnblogs.com/hanlinyuan/p/17413914.html

相关文章

  • 代码随想录算法训练营第十五天|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二
    【参考链接】102.二叉树的层序遍历 【注意】1.队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。2.遍历的时候要记录队列的大小。就可以知道哪些元素是第几层......
  • 2-3 改写二分搜索算法
    设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。测试数据(自己写的):61234567输出:i=5,j=-16123456-1输出:i=-1,j=......
  • PPO算法的一个简单实现:对话机器人
    综上,PPO算法是一种具体的Actor-Critic算法实现,比如在对话机器人中,输入的prompt是state,输出的response是action,想要得到的策略就是怎么从prompt生成action能够得到最大的reward,也就是拟合人类的偏好。具体实现时,可以按如下两大步骤实现首先定义4个模型:Actor(action_logits)、SFT(s......
  • 算法导论阅读记录
    \(\color{red}{不正确的算法如果其错误率可以被控制的情况下肯是很有用的}\)动态图解排序算法插入排序对少量元素的排序较为有效,每次选择一个待排序元素,依次与已排序集合比较伪代码```//从第2个元素开始比较for(i=2;i<length(arr);i++)在单个循环中保存每次的值,保证数据......
  • 文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及
    文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)1.项目介绍目标:输入一篇文档,将文档进行关键信息提取,进行结构化,并最终组织成图谱组织形式,形成对文章语义信息的图谱化展示。如何用图谱和结构化的方式,即以简洁的方式对......
  • 归并排序Java版(图文并茂思路分析)
    归并排序工作原理:工作原理是将一个大问题分解成小问题,再将小问题分解成更小的。(乍一看就觉得是像一个递归)就像下图这样。然后不断的将其一份为二,分解成更小的排序。我们设一个函数叫MergeSort(arr,l,r)意思就是将arr数组下标为[l,r]之间的数进行排序。那么就开始不断的调用自......
  • 非极大值抑制(NMS)算法详解
    NMS(nonmaximumsuppression)即非极大值抑制,广泛应用于传统的特征提取和深度学习的目标检测算法中。NMS原理是通过筛选出局部极大值得到最优解。在2维边缘提取中体现在提取边缘轮廓后将一些梯度方向变化率较小的点筛选掉,避免造成干扰。在三维关键点检测中也起到重要作用,筛选掉特......
  • 哈希算法
    哈希算法哈希算法哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法最重要的特点就是:相同的输入一定得到相同的输出;不同的输入大概率得到不同的输出。哈希算法的目的就是为了验证原始数据是否被篡改。Java字符串......
  • 某验图片混淆算法还原
    文章只供技术交流使用,不放任何成品,如有侵害贵公司权益行为,联系我,立即予以删除抓包先完整的抓一次包简单分析register-slide----时间戳---->返回gt,challengegettype.php?----gt---->返回一串,包含各个js地址get.php?----gt,challenge,w---->返回一串json,里面有可疑......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例2:输入:nums=[-1,0,3,......