zoukankan      html  css  js  c++  java
  • (纯白话算法系列)选择排序、时间复杂度分析、代码演示

    定义:

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

    纯白话说:所谓选择排序,即每次循环挑出最小的数,将其与本次循环的起点位置元素进行交换,如果有N个元素,则对比N-2次,因为前面N-1个元素都排好了位置,最后一位肯定是最大的,又因为是对比,所以自然会比元素个数少一。

    来看一个动态图:

    图片摘自--https://www.cnblogs.com/ylsm-kb/p/9505270.html

    从图上可以看出,每次循环都找出了最小值,然后跟起点位置元素进行交换。

    直接看代码:

    package com.bean.select_sort;
    
    import java.util.Arrays;
    
    public class SelectSort {
    
        public static void SelectSorted(int[] arr) {
            if (arr == null || arr.length < 2) {//数组为空或元素小于2没比较意义
                return;
            }
            for (int i = 0; i < arr.length-1; i++) {
                int minIndex = i;
                for (int j = i+1; j<arr.length-1; j++) {
                    minIndex = arr[j] < arr[minIndex] ? j : minIndex;
                }
                swap(arr,i,minIndex);
            }
        }
        private static void swap(int[] arr,int left, int right) {
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
    
        public static void main(String[] args) {
            int arr[] = {5,1,5,4,11,21,30};
            SelectSorted(arr);
            System.out.println(Arrays.toString(arr));
        }
    }
    
    
    

    代码也比较简单,我用一个示意图来描述代码:

    每次都会把排序最小的元素放在循环的第一个位置,循环的重点位置都是N-1,为什么不是N前面已经说过了,因为N之前的位置都排序完了,最后一位肯定是最大的元素。

    所以第一层for循环是为了限定起始位置和终点位置,第二层循环是在限定范围内进行查找,找到最小元素的索引minIndex,找到之后,将其位置记录下来,并将数组中的起始位置元素和minIndex数组的元素进行交换。

    时间复杂度:

    很明显这又是一个等差数列,所以时间复杂度是O(n²)。

  • 相关阅读:
    MFC中DoDataExchange()的作用
    图片下面出现空白像素的问题解决
    nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行
    配置 PHP 的 Session 存储到 Redis
    redis4安装
    jumpserver安装
    mysql命令参数详解
    定制LNMP的RPM包
    NTP原理
    内网环境NTP服务及时间同步(CentOS6.x)配置和部署
  • 原文地址:https://www.cnblogs.com/taobean/p/12364273.html
Copyright © 2011-2022 走看看