经典算法之直接选择排序(SelectionSort)

简介: 经典算法之直接选择排序(SelectionSort)

算法原理

每次从待排序的数据元素中选择最小值或最大值,放在第一位

从剩余的元素中继续寻找最小或最大元素,放在已排序元素的后面

重复以上步骤,直到排序完成

算法步骤

a <===> b :表示交换 a 、b


初始状态 [9 18 38 2 46 8 43 46 5 12 ] 9 <===> 2


第一次:[2 18 38 9 46 8 43 46 5 12 ] 18 <===> 5


第二次:[2 5 38 9 46 8 43 46 18 12 ] 38 <===> 8


第三次:[2 5 8 9 46 38 43 46 18 12 ] 9 <===> 9


第四次:[2 5 8 9 46 38 43 46 18 12 ] 46 <===> 12


第五次:[2 5 8 9 12 38 43 46 18 46 ] 38 <===> 18


第六次:[2 5 8 9 12 18 43 46 38 46 ] 43 <===> 38


第七次:[2 5 8 9 12 18 38 46 43 46 ] 46 <===> 43


第八次: [2 5 8 9 12 18 38 43 46 46] 46<===> 46


第九次: [2 5 8 9 12 18 38 43 46 46] ==> 排序完成


动图演示

d20395ecf20440a6a2e179c71d0546f3.gif

java代码实现
public class SelectionSort {
    public static void main(String[] args) {
        Integer[] arr = {9,18,38,2,46,8,43,46,5,12};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void sort(Comparable[] a){
        for (int i = 0;i <= a.length - 2;i++){
            //定义一个变量,记录最小元素的索引
            int minIndex = i;
            for (int j = i + 1;j < a.length;j++){
                //比minIndex与j两个索引处的值的大小
                if (greater(a[minIndex],a[j])){
                    minIndex = j;
                }
            }
            //交换最小元素的所在索引minIndex处的值与索引值为i的元素的值
            swap(a,i,minIndex);
        }
    }
    //比较 v 是否大于 w
    public static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w) > 0;
    }
    //数组元素交换位置
    private static void swap(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
排序前:{9,18,38,2,46,8,43,46,5,12}
排序后:{2,5,8,9,12,18,38,43,46,46}

算法分析

时间复杂度:


假如被排序的数列中有n个数。遍历一次的时间复杂度是O(n),而我们需要遍历 n -1 次,所以选择排序的时间复杂度是 O(n²)。


相关文章
|
11天前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
12 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
18天前
|
搜索推荐 Java Go
深入了解选择排序算法
深入了解选择排序算法
15 4
|
15天前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
17天前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
16 0
|
2月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
4月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
4月前
|
搜索推荐
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码
|
4月前
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
29 4
|
4月前
|
搜索推荐 算法
【C/排序算法】:堆排序和选择排序
【C/排序算法】:堆排序和选择排序
31 0
|
4月前
|
算法 搜索推荐 Java
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
33 0