排序算法图解(二):选择排序

简介: 文章目录1 选择排序简介2 图解选择排序算法3 选择排序代码实现写在最后

1 选择排序简介

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。


2 图解选择排序算法

选择排序的基本思想如下:

第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]进行交换;

第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]进行交换;

第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]进行交换;

第 i 次:从arr[i]~arr[i-1]中选取最小值,与arr[i]进行交换;

总共通过n-1次,可以得到从小到大的有序序列。


以序列:{8, 3, 2, 1, 7, 4, 6, 5} 为例!分步骤图解如下:




思路说明:


在每趟排序时,都假定当前位置的元素为最小值,如果在遍历过程中发现有比当前位置元素还小的值,则替换最小值。(先将最小值记录,此趟遍历完成再替换)

选择排序一共有数组大小-1趟排序。

3 选择排序代码实现

import java.util.Arrays;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 选择排序
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array = {8, 3, 2, 1, 7, 4, 6, 5};
        System.out.println("排序前: " + Arrays.toString(array));
        selectSort(array);
        System.out.println("排序后: " + Arrays.toString(array));
    }
    //选择排序
    public static void selectSort(int[] arr){
        //选择排序过程
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i; //假定最小索引,最小值为第一个元素
            int min = arr[minIndex];
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]){
                    //更新最小值
                    min = arr[j];
                    minIndex = j;
                }
            }
            //将最小值放进arr[i]
            if (i != minIndex){
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
            //输出每轮排序后的结果
            System.out.println("第" + (i+1) + "趟: " + Arrays.toString(arr));
        }
    }
}

结果如下

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