排序之简单选择排序

开发 后端
本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助。

前言

  本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助。

基本思想

  选择排序的基本思想是每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。我们这里先介绍的是简单选择排序法。简单选择排序法(Simple Selection Sort)就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1≤i≤n)个记录交换之,就是说一刚开始,从序列arr[0...n-1]选出最小的元素与第1个记录即arr[0]交换,再从arr[1...n-1]中选出最小的与arr[1]进行交换,arr[2...n-1]中最小的与arr[2]进行交换,以此类推,直至整个序列有序。

代码实现

  /**
     * 简单选择排序
     * @param arr
     */
    public static void simpleSelectSort(int[] arr){
        int len = arr.length;
        int index;                                // 记录arr[i...len-1]最小元素的下标
        for(int i=0; i<len; i++){
            index = i;
            for(int j=i+1; j<len; j++){            // 寻找arr[j...len-1]中最小元素
                if(arr[index] > arr[j]){
                    index = j;
                }
            }
            swap(arr,i,index);                    // 交换arr[i]和arr[index]
        }
    }

 

 

执行过程模拟

  上面的代码应该是很容易理解的,不过我们还是来模拟一下计算机执行的过程。

  1)一开始,初始序列是{5,3,7,9,1,6,4,8,2},i=0,index=i=0,j=i+1=1,初始时,状态如下

  2)i=0时

  3)i=1时,同理,交换如下

  4)i=2,3,4,5,6,7,8时,如下

  至此,整个序列已经从小到大有序了;当然,从上面的模拟过程可以看出来,算法是可以些许改善的,改善的事就交给各位看官了,就当是拓展!

总结

  简单排序算法还是比较简单的,没什么难点,希望大家能够在我提供的代码实现上进行些许优化,比如当i=index时,不需要优化,等等!

责任编辑:李英杰 来源: 博客园
相关推荐

2023-09-26 22:22:30

选择排序Python

2019-10-30 08:53:46

JavaScript冒泡排序选择排序

2011-04-11 14:52:18

选择排序排序C++

2011-04-20 13:56:08

选择排序

2009-08-11 09:19:52

C#选择排序C#算法

2022-11-21 07:58:10

Java排序冒泡排序

2023-03-06 08:10:52

数据结构算法数据

2020-03-27 09:06:54

选择排序算法冒泡排序

2021-01-19 07:02:26

算法数据结构堆排序

2021-01-21 05:22:36

排序算法选择

2023-10-04 18:23:02

插入排序算法

2013-06-20 11:21:58

iOS开发UITableView

2009-06-05 10:24:37

C#排序排序

2021-04-15 09:36:44

Java数据结构算法

2009-08-10 16:19:37

C#冒泡排序

2009-07-02 10:03:02

DataView排序

2022-07-27 09:00:26

前端拖拽排序库

2023-10-05 09:01:05

插入排序对象序列log2i

2021-06-09 09:06:52

Go语言算法

2011-04-20 11:22:51

Java
点赞
收藏

51CTO技术栈公众号