`
wandejun1012
  • 浏览: 2737777 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

选择排序

    博客分类:
  • java
 
阅读更多

 

主要思路:始终拿遍历的值和最小值比较,如果发现谁最小了,那么就交换值(其实交换索引也行)。

---------------------------------------------------------

经典排序算法 - 选择排序Selection sort

顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,

顺序放入新数组,直到全部拿完

再简单点,对着一群数组说,你们谁最小出列,站到最后边

然后继续对剩余的无序数组说,你们谁最小出列,站到最后边

再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大

举例

先说看每步的状态变化,后边介绍细节,现有无序数组[6 2 4 1 5 9]

第一趟找到最小数1,放到最前边(与首位数字交换)

交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

第二趟找到余下数字[2 4 6 5 9]里的最小数2,与当前数组的首位数字进行交换,实际没有交换,本来就在首位

交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

 

第三趟继续找到剩余[4 6 5 9]数字里的最小数4,实际没有交换,4待首位置无须交换

第四趟从剩余的[6 5 9]里找到最小数5,与首位数字6交换位置

交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

交换后:| 1 | 2 | 4 | 5 | 6 | 9 |

第五趟从剩余的[6 9]里找到最小数6,发现它待在正确的位置,没有交换

排序完毕输出正确结果[1 2 4 5 6 9]

第一趟找到最小数1的细节

当前数组是| 6 | 2 | 4 | 1 | 5 | 9 |

先把6取出来,让它扮演最小数

当前最小数6与其它数一一进行比较,发现更小数就交换角色

当前最小数6与2比较,发现更小数,交换角色,此时最小数是2,接下来2与剩余数字比较

当前最小数2与4比较,不动

当前最小数2与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较

当前最小数1与5比较,不动

当前最小数1与9比较,不动,到达末尾

当前最小数1与当前首位数字进行位置交换,如下所示

交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

完成一趟排序,其余步骤类似

代码仅供参考

复制代码
        static void selection_sort(int[] unsorted)
        {
            for (int i = 0; i < unsorted.Length; i++)
            {
                int min = unsorted[i], min_index = i;
                for (int j = i; j < unsorted.Length; j++)
                {
                    if (unsorted[j] < min)
                    {
                        min = unsorted[j];
                        min_index = j;
                    }
                }
                if (min_index != i)
                {
                    int temp = unsorted[i];
                    unsorted[i] = unsorted[min_index];
                    unsorted[min_index] = temp;
                }
            }
        }

        static void Main(string[] args)
        {
            int[] x = { 6, 2, 4, 1, 5, 9 };
            selection_sort(x);
            foreach (var item in x)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
复制代码

 

 

refurl:http://www.cnblogs.com/kkun/archive/2011/11/23/selection_sort.html

 

分享到:
评论

相关推荐

    Python实现的选择排序算法示例

    ### Python实现的选择排序算法知识点详解 #### 一、选择排序的基本概念 选择排序(Selection Sort)是一种简单直观的比较排序算法。它的基本思想是:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始...

    python选择排序算法实例总结

    选择排序算法是计算机科学中较为基础且应用广泛的排序方法之一。它基于简单的比较和交换机制,对一系列数据项进行排序。尽管选择排序在理论上的时间复杂度并不高,但在实际应用中,由于其排序过程中交换元素的频率较...

    java-选择排序.rar

    Java选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序属于不稳定的排序方法,其时间...

    java排序算法之_选择排序(实例讲解)

    java排序算法之选择排序 选择排序是一种简单的排序算法,它的工作原理是从未排序好的序列中选择出最小(或最大)的元素,然后与第i趟排序的第i-1个位置的元素进行交换。整个排序过程只需要遍历n-1趟便可排好,最后...

    C++选择排序算法实例

    选择排序是一种简单的排序算法,它的核心思想是通过重复地找到待排序数组中的最小(或最大)元素,并将其放置到排序序列的起始位置,从而逐步构建一个有序序列。在C++中,我们可以用函数来实现这个算法。下面是对...

    C++实现选择排序(selectionSort)

    C++实现选择排序(selectionSort) 选择排序是常见的排序算法之一,主要思路是每次选择未排序的最小值,并将其放在已排序的末尾,以此达到整个数组的排序。下面是C++实现选择排序的详细介绍: 一、思路 选择排序...

    选择排序1

    选择排序算法详解 选择排序是一种简单、直观的排序算法,它是对冒泡排序算法进行优化后得到的一种排序算法。相比冒泡排序,选择排序减少了对序列进行排序的过程中元素移动的次数。 原理描述方式 1: 以对序列进行...

    选择排序 蛮力法-C语言

    选择排序是一种简单的排序算法,它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,然后放到已排序序列的末尾。...

    Python实现选择排序

    选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,...

    Python排序算法之选择排序定义与用法示例

    选择排序是计算机科学中一种简单直观的排序算法。该算法在每一趟选择中,都会从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是一种原地的、不...

    完整详细版Python全套教学课件 第03节 选择排序.pptx

    **选择排序**是一种基础的排序算法,主要原理是通过不断地比较元素来确定它们的相对顺序。在Python中,选择排序可以实现为升序或降序排列。本节内容详细介绍了简单选择排序的原理、实现方式以及优化策略。 **1. ...

    冒泡排序&选择排序&插入排序

    冒泡排序、选择排序和插入排序是三种基本的排序算法,它们都是针对数组或列表进行操作,目的是将无序的数据序列调整为升序或降序的有序序列。 **冒泡排序**: 冒泡排序的核心思想是通过重复遍历待排序的数列,比较...

    排序算法——选择排序.docx

    选择排序是一种简单直观的排序算法,它的工作原理可以分为以下几个步骤: 1. **理解选择排序**:选择排序从数组的第一个元素开始,遍历数组寻找当前未排序部分的最小(或最大)元素。找到后,将这个最小(或最大)...

    src_选择排序_

    **选择排序**是一种基础的排序算法,其基本思想是通过n次比较,每次找到剩余未排序部分中的最小(或最大)元素,将其与未排序部分的第一个元素交换,从而逐步将未排序的部分减少,最终实现整个序列的排序。...

    冒泡排序和选择排序_C语言_冒泡排序_选择排序_

    冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...

    简单选择排序

    简单选择排序

    PHP简单选择排序(Simple Selection Sort)算法学习

    简单选择排序是一种原地排序算法,因为它不需要使用额外的存储空间,只需要一个交换变量,因此其空间复杂度为O(1)。 在选择排序算法中,算法复杂度是一个重要的知识点。简单选择排序算法的执行时间并不依赖于输入的...

    选择排序法源代码

    选择排序是一种简单的排序算法,它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,然后放到已排序序列的末尾。...

    数据结构之选择排序

    ### 数据结构之选择排序 #### 一、选择排序概述 选择排序是一种简单直观的比较排序算法。它的工作原理是:遍历数组中的所有元素,找到其中最小(或最大)的一个元素,然后将其放到数组的第一个位置;接着,在剩下...

Global site tag (gtag.js) - Google Analytics