选择排序算法之泛型优化

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

选择排序算法

工作原理:

每一次从待排序的数据元素中选中最小的一个元素,然后,再从剩余未排序元素中继续寻找最小元素,将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日
    浏览(36)
  • TypeScript 进阶之泛型

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

    2024年01月23日
    浏览(41)
  • java入坑之泛型

    Java泛型是JDK 5中引入的一个新特性,它提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这意味着你可以使用一套代码来处理多种不同类型的数据 ArrayListE,E表示元素El

    2024年02月10日
    浏览(38)
  • 30天拿下Rust之泛型

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

    2024年03月17日
    浏览(49)
  • C#(六十二)之泛型的约束

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

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

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

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

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

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

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

    2024年02月16日
    浏览(45)
  • Rust之泛型、特性和生命期(三):Traits:定义共同的行为

    Windows 10 Rust 1.70.0    VS Code 1.79.2 这里继续沿用上次工程rust-demo Trait定义了一个特定类型所具有的功能,并且可以与其他类型共享。我们可以使用特质以抽象的方式来定义共享行为。我们可以使用特质的界限来指定一个通用类型可以是任何具有某些行为的类型。  注意:trait

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

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

    2024年02月09日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包