`
keepwork
  • 浏览: 332418 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java算法--选择排序

 
阅读更多

选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。

举个实例来看看:

  1. 初始: [381716167313932211]  
  2.  
  3. i = 0:  [2 , 171616731393238 , 11] (0th [38]<->8th [2])  
  4.  
  5. i = 1:  [27 , 161617 , 3139323811] (1st [38]<->4th [17])  
  6.  
  7. i = 2:  [2711 , 16173139323816 ] (2nd [11]<->9th [16])  
  8.  
  9. i = 3:  [271116173139323816] ( 无需交换 )  
  10.  
  11. i = 4:  [27111616 , 3139323817 ] (4th [17]<->9th [16])  
  12.  
  13. i = 5:  [2711161617 , 39323831 ] (5th [31]<->9th [17])  
  14.  
  15. i = 6:  [271116161731 , 323839 ] (6th [39]<->9th [31])  
  16.  
  17. i = 7:  [271116161731323839] ( 无需交换 )  
  18.  
  19. i = 8:  [271116161731323839] ( 无需交换 )  
  20.  
  21. i = 9:  [271116161731323839] ( 无需交换 ) 

由例子可以看出,选择排序随着排序的进行( i 逐渐增大),比较的次数会越来越少,但是不论数组初始是否有序,选择排序都会从 i 至数组末尾进行一次选择比较,所以给定长度的数组,选择排序的比较次数是固定的: 1 + 2 + 3 + …. + n = n * (n + 1) / 2 ,而交换的次数则跟初始数组的顺序有关,如果初始数组顺序为随机,则在最坏情况下,数组元素将会交换 n 次,最好的情况下则可能 0 次(数组本身即为有序)。

由此可以推出,选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1) (选择排序只需要一个额外空间用于数组元素交换)。

实现代码:

 

/**  
 * Selection Sorting  
 */ 
SELECTION(new Sortable() {  
    public <T extends Comparable<T>> void sort(T[] array, boolean ascend) {  
        int len = array.length;  
        for (int i = 0; i < len; i++) {  
            int selected = i;  
            for (int j = i + 1; j < len; j++) {  
                int compare = array[j].compareTo(array[selected]);  
                if (compare != 0 && compare < 0 == ascend) {  
                    selected = j;  
                }  
            }  
 
            exchange(array, i, selected);  
        }  
    }  
}) 

 

 

分享到:
评论

相关推荐

    [Java算法-排序]选择排序.java

    该资源提供了Java中如何实现选择排序的全面指南。文档中涵盖了选择排序的基本概念,包括如何对数组进行排序以及如何在Java中实现选择排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现选择排序,包括详细...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    详解Java常用排序算法-选择排序

    详解Java常用排序算法-选择排序 选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是每次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。 选择...

    [Java算法-排序]-堆排序.java

    该资源提供了Java中实现堆排序的全面指南。文档中涵盖了堆排序的基本概念,包括如何对数组进行排序以及如何在Java中实现堆排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序]-插入排序.java

    该资源提供了Java中实现插入排序的全面指南。文档中涵盖了插入排序的基本概念,包括如何对数组进行排序以及如何在Java中实现插入排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序]快速排序.java

    这份资源提供了Java中如何实现快速排序的全面指南。文档中涵盖了快速排序的基本概念,包括如何对数组进行排序以及如何在Java中实现快速排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    java排序算法-大全.rar

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。这个名为"java排序算法-大全.rar"的压缩包文件显然包含了多种Java实现的排序算法,这对于我们理解和掌握这些算法至关重要。 ...

    [Java算法-排序]归并排序.java

    该资源提供了一份全面的指南,介绍了如何在Java中实现归并排序。文档中涵盖了归并排序的基本概念,包括如何对数组进行排序以及如何在Java中...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序]希尔排序.java

    该资源提供了一份全面的指南,介绍了如何在Java中实现希尔排序。文档中涵盖了希尔排序的基本概念,包括如何对数组进行排序以及如何在Java中...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序]冒泡排序.java

    该资源提供了Java中实现冒泡排序的全面指南。文档中涵盖了冒泡排序的基本概念,包括如何对数组进行排序以及如何在Java中实现冒泡排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序练习]计数排序.java

    该资源提供了在Java中如何实现计数排序的全面指南。文档涵盖了计数排序的基本概念,包括如何对数组进行排序以及如何在Java中实现计数排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序练习]基数排序.java

    该资源提供了在Java中如何实现基数排序的全面指南。文档涵盖了基数排序的基本概念,包括如何对数组进行排序以及如何在Java中实现基数排序。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    Java后端算法-冒泡排序和选择排序对比

    在Java后端开发中,掌握各种排序算法是提高程序效率的关键。本文将深入探讨两种基础且常见的排序算法:冒泡排序和选择排序。这两种算法都是简单直观的排序方法,但它们在性能和适用场景上有所不同。 **冒泡排序**:...

    [Java算法-排序练习]三色排序判断.java

    该资源提供了Java中如何进行三色排序判断的全面指南。文档中涵盖了三色排序判断的基本概念,包括如何对数组进行排序以及如何在Java中实现三色...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    [Java算法-排序练习]小范围排序.java

    该资源提供了在Java中实现小范围排序的全面指南。文档中涵盖了小范围排序的基本概念,包括如何对数组进行排序以及如何在Java中实现小范围排序...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    详解Java常用排序算法-插入排序

    Java排序算法 - 插入排序 插入排序(Insertion Sort)是一种简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。该算法的实现非常简单,但其时间复杂度...

    最快的排序算法 javahash实现-Java-哈希算法-最快的实现,排序算法数据结构

    Java哈希算法排序算法数据结构知识点总结 以下是关于Java哈希算法排序算法数据结构的知识点总结: 1. 哈希算法的速度问题:在讨论哈希算法的速度问题时,需要考虑到哈希函数的选择和实现方式。在大多数情况下,...

    详解Java常用排序算法-归并排序

    Java常用排序算法-归并排序 归并排序是一种分治思想的排序算法,其基本思想是将待排序的数组分成若干个子序列,每个子序列都是有序...但是,需要根据实际情况选择合适的排序算法和实现方式,以确保排序效率和稳定性。

Global site tag (gtag.js) - Google Analytics