美文网首页
01选择排序

01选择排序

作者: 飞奔吧牛牛 | 来源:发表于2019-04-09 00:31 被阅读0次

原理:

数组array = {2,15,7,9,30, 1, 5}

口语描述:找出最小(大)的放到第一个位置,再从剩下的数中找到最小(大)的放到第二个位置,再从剩下的数中找到最小(大)的放到第三个位置。。。。一直找到最后

假设最小值的下标为min(默认为0),

第一次:从array[0]开始,找到array[0]~array[n]最小的值:array[min],
交换array[0] 和 array[min]。

第二次:从array[1]开始,找到array[1]~array[n]最小的值:array[min],交换array[1] 和 array[min]。

第三次:从array[2]开始,找到array[2]~array[n]最小的值:array[min],交换array[2] 和 array[min]。

。。。。。。
一直循环到倒数第二个即可

代码:


/**
 * 选择排序:最简单但是最没用的排序算法
 * 
 * */
public class Sort01_Select {
    
    public static void main(String[] args) {
        int[] array = {2,15,7,9,30, 1, 5};
        selectSort(array);
        for (int i : array) {
            System.out.print(i);
            System.out.print(" ");
        }
    }
    

    /**
     * 时间复杂度:
     * 当数组长度为n时,i和j的取值范围以及循环次数:
     * 
     * 范围           |   次数
     * i∈[0, n-2]   |   n-1
     * --------------------
     * j∈[1, n-1],  |   n-1
     * j∈[2, n-1],  |   n-2
     * ...          |   ...
     * j∈[n-2, n-1],|   2
     * j∈[n-1],|    1
     * 
     * 内层循环一共执行了(n-1)+(n-2)+...+1=(n² - n)/2次,
     * 忽略低次项,忽略常数项,取最高次n²
     * 得到时间复杂度为:O(n²)
     */
    public static void selectSort(int[] array) {
        int minIndex = 0;
        for (int i = 0; i < array.length - 1; i++) {
            minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            //交换
            if (array[minIndex] < array[i]) {
                int temp = array[i];
                array[i] = array[minIndex];
                array[minIndex] = temp;
            }
        }
    }
}

打印结果:

1 2 5 7 9 15 30 

相关文章

  • 01选择排序

    原理: 数组array = {2,15,7,9,30, 1, 5} 口语描述:找出最小(大)的放到第一个位置,再从...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • 小马哥2019年9月最新-恋上数据结构与算法(第二季)

    【目录】 │01.冒泡、选择、堆排序.mp4 │02.插入排序.mp4 │03.归并排序.mp4 │04.快速、希...

  • 数据结构之排序

    选择排序1.直接选择排序 原理直接选择排序过程直接选择排序过程 实现: DataWrap.java来模拟待排序的数...

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

  • PHP常用算法

    基于选择的排序算法 常见的基于选择的排序算法有:冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选在排序算...

  • 排序 -- 选择/插入

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 选择排序与插入排序 ...

  • java快速学习排序---选择排序

    1.java实现选择排序 (1)、图解选择排序 (2)、选择排序的思想 选择排序首先在未排序序列中找到最小(大)元...

网友评论

      本文标题:01选择排序

      本文链接:https://www.haomeiwen.com/subject/wrfviqtx.html