美文网首页
浅谈选择排序

浅谈选择排序

作者: str_ | 来源:发表于2018-10-15 14:15 被阅读0次

思想

首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么就和自己交换)。在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。

过程分析

举例:{5,1,2,0,1,8}

----------------------------第一次排序-------------------------

原始数据:5 1 2 0 1 8
除5以外的最小元素为0,则5与0交换
结果: 0 1 2 5 1 8

----------------------------第二次排序-------------------------

原始数据: 0 1 2 5 1 8
除0 1以外的最小元素为1,不交换
结果:0 1 2 5 1 8

----------------------------第三次排序-------------------------

原始数据: 0 1 2 5 1 8
除0 1 2以外的最小元素为1,则2与1交换
结果:0 1 1 5 2 8

----------------------------第四次排序-------------------------

原始数据: 0 1 1 5 2 8
除0 1 1 5以外的最小元素为2,则5与2交换
结果:0 1 1 2 5 8

----------------------------第五次排序-------------------------

原始数据: 0 1 1 5 2 8
除0 1 1 5 2以外的最小元素为2,不交换
结果:0 1 1 2 5 8

源码

public class SelectionSort{
    
    public static void main(String[] args)
    {
        //将数组a按升序排列
        int[] a = {5,1,2,0,1,8};
        
        System.out.print("排序前:");
        for(int i : a) {
            System.out.print(i+" ");
        }
        System.out.println();
        
        for(int i = 0; i<a.length; i++) {
            int minIndex = i;//最小元素的索引
            for(int j = i+1; j<a.length; j++) {
                if(a[j]<a[minIndex]) {
                    minIndex = j;//更新目前找到的最小值元素的索引
                }
            }
            
            //内层循环结束后,再进行交换
            if(minIndex > i) {
                int temp = a[minIndex];
                a[minIndex] = a[i];
                a[i] = temp;
            }
        }
        
        System.out.print("排序后:");
        for(int i : a) {
            System.out.print(i+" ");
        }
    }
}

复杂度分析

假设有N个元素,首先看内循环,第一次内循环比较N-1次,第二次比较N-2,……,最后一次比较1次。共比较(N-1)+ (N-2) + … + 1,等差数列求和,N(N-1)/2,去掉最高项系数,时间复杂度为O(N^2)

相关文章

  • 浅谈选择排序

    思想 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么就和自己...

  • 堆排序

    这篇文章非常好浅谈堆排序,收到了较大的启发。堆排序是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。...

  • 浅谈排序算法

    前段时间在看计算机科学科学及编程导论,其中谈到了排序的各种算法,在这我浅谈四种插入,选择,冒泡,以及堆排序。 首先...

  • 选择排序(oc/java/Python/scala)

    一、浅谈数组和链表 二、 选择排序介绍: 方案一: scala实现代码: Java实现代码: OC实现代码: 主文...

  • 浅谈算法和数据结构

    注:采转归档,自己学习查询使用 浅谈算法和数据结构: 一 栈和队列浅谈算法和数据结构: 二 基本排序算法浅谈算法和...

  • 算法-选择排序

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

  • 常见排序算法

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

  • Java基础 浅谈冒泡选择 排序

    “简单不先于复杂,而是在复杂之后.” —— Alan Perlis 序言 冒泡排序 冒泡排序是七大排序算法中较为简...

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

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

  • 数据结构之排序

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

网友评论

      本文标题:浅谈选择排序

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