选择排序算法之泛型优化

这篇具有很好参考价值的文章主要介绍了选择排序算法之泛型优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

选择排序算法

工作原理:

每一次从待排序的数据元素中选中最小的一个元素,然后,再从剩余未排序元素中继续寻找最小元素,将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);
        }
    }
}

当然,为了匹配多种类型的对象,可以使用泛型匹配各类对象的排序文章来源地址https://www.toymoban.com/news/detail-458952.html

/**
 * @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);
        }
    }
}

到了这里,关于选择排序算法之泛型优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java之泛型

    泛型: 泛型实现了参数化类型的概念,使代码可以应用于多种类型。 泛型的目的是希望类或方法能够具有最广泛的表达能力。 Java的泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。 泛型类: 类型参数:用尖括号括住,实际

    2024年02月11日
    浏览(30)
  • TypeScript 进阶之泛型

    避免代码重复和创建可重用类型是编写干净代码的重要部分。 将所有类型属性都设置为可选 Required 与 Partial 相反。它构造一个类型,其中需要该类型的所有属性。它可用于确保没有可选属性出现在类型中。 多属性的对象中摘取某些属性。 键可以是字符串文字或字符串文字的

    2024年01月23日
    浏览(29)
  • 30天拿下Rust之泛型

    概述         在Rust语言中,泛型是一种强大的工具,它允许我们编写可复用且灵活的代码。通过泛型,我们可以创建适用于多种类型的数据结构和函数,而无需为每种类型都重复编写相同的逻辑。在Rust中,泛型通过指定类型参数来实现,这些类型参数会在编译时被具体类

    2024年03月17日
    浏览(40)
  • Rust之泛型、trait与生命周期

    泛型是具体类型或其他属性的抽象替代。在编写代码时,可以直接描述泛型的行为,或者它与其他泛型产生的联系,而无须知晓它在编译和运行代码时采用的具体类型。 们可以在声明函数签名或结构体等元素时使用泛型,并在随后搭配不同的具体类型来使用这些元素。 当使

    2024年02月13日
    浏览(26)
  • C#(六十二)之泛型的约束

    类型约束 基类约束有两个重要的目的。 1:它允许在泛型类中使用有约束指定的基类成员。 2:确保只能使用支持指定基类或派生类的类型实例。 约束是使用 where 上下文指定的。 下表列出了五种类型的约束: 约束 说明 T:struct 类型参数必须是值类型。可以指定除

    2024年02月17日
    浏览(31)
  • 排序算法大全:冒泡排序【含优化】,选择排序【含优化】,直接插入排序,希尔排序,堆排序,快速排序【含3种实现版本及非递归实现】,归并排序【含非递归实现】。详细图解,文字解释,代码实现,性能分析。

    目录  一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析   三、直接插入排序 1、直接插入排序思想 2、直接插入排序算法的性能分析 四、希尔排序 1、希尔排序思想 2、希尔排序算法的性能分析 五、堆排

    2024年02月20日
    浏览(38)
  • Rust之泛型、特性和生命期(四):验证有生存期的引用

      Windows 10 Rust 1.71.0   VS Code 1.80.1 这里继续沿用上次工程rust-demo 生存期是我们已经在使用的另一种泛型。生存期不是确保一个类型具有我们想要的行为,而是确保引用在我们需要时有效。 我们在第4章“引用和借用”一节中没有讨论的一个细节是,Rust中的每个引用都有一个生

    2024年02月16日
    浏览(31)
  • 从零开始学习 Java:简单易懂的入门指南之泛型及set集合(二十二)

    1.1泛型概述 泛型的介绍 ​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 类型: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: 类型1,类型2…: 指定多

    2024年02月09日
    浏览(30)
  • 排序算法:选择排序(直接选择排序、堆排序)

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关排序算法的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、   目录 前言: 1.选择

    2024年02月09日
    浏览(29)
  • 【算法】排序——选择排序和交换排序(快速排序)

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏  =========================

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包