主要思路:始终拿遍历的值和最小值比较,如果发现谁最小了,那么就交换值(其实交换索引也行)。
---------------------------------------------------------
经典排序算法 - 选择排序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实现的选择排序算法知识点详解 #### 一、选择排序的基本概念 选择排序(Selection Sort)是一种简单直观的比较排序算法。它的基本思想是:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始...
选择排序算法是计算机科学中较为基础且应用广泛的排序方法之一。它基于简单的比较和交换机制,对一系列数据项进行排序。尽管选择排序在理论上的时间复杂度并不高,但在实际应用中,由于其排序过程中交换元素的频率较...
Java选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序属于不稳定的排序方法,其时间...
java排序算法之选择排序 选择排序是一种简单的排序算法,它的工作原理是从未排序好的序列中选择出最小(或最大)的元素,然后与第i趟排序的第i-1个位置的元素进行交换。整个排序过程只需要遍历n-1趟便可排好,最后...
选择排序是一种简单的排序算法,它的核心思想是通过重复地找到待排序数组中的最小(或最大)元素,并将其放置到排序序列的起始位置,从而逐步构建一个有序序列。在C++中,我们可以用函数来实现这个算法。下面是对...
C++实现选择排序(selectionSort) 选择排序是常见的排序算法之一,主要思路是每次选择未排序的最小值,并将其放在已排序的末尾,以此达到整个数组的排序。下面是C++实现选择排序的详细介绍: 一、思路 选择排序...
选择排序算法详解 选择排序是一种简单、直观的排序算法,它是对冒泡排序算法进行优化后得到的一种排序算法。相比冒泡排序,选择排序减少了对序列进行排序的过程中元素移动的次数。 原理描述方式 1: 以对序列进行...
选择排序是一种简单的排序算法,它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,然后放到已排序序列的末尾。...
选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,...
选择排序是计算机科学中一种简单直观的排序算法。该算法在每一趟选择中,都会从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是一种原地的、不...
**选择排序**是一种基础的排序算法,主要原理是通过不断地比较元素来确定它们的相对顺序。在Python中,选择排序可以实现为升序或降序排列。本节内容详细介绍了简单选择排序的原理、实现方式以及优化策略。 **1. ...
冒泡排序、选择排序和插入排序是三种基本的排序算法,它们都是针对数组或列表进行操作,目的是将无序的数据序列调整为升序或降序的有序序列。 **冒泡排序**: 冒泡排序的核心思想是通过重复遍历待排序的数列,比较...
选择排序是一种简单直观的排序算法,它的工作原理可以分为以下几个步骤: 1. **理解选择排序**:选择排序从数组的第一个元素开始,遍历数组寻找当前未排序部分的最小(或最大)元素。找到后,将这个最小(或最大)...
**选择排序**是一种基础的排序算法,其基本思想是通过n次比较,每次找到剩余未排序部分中的最小(或最大)元素,将其与未排序部分的第一个元素交换,从而逐步将未排序的部分减少,最终实现整个序列的排序。...
冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...
简单选择排序
简单选择排序是一种原地排序算法,因为它不需要使用额外的存储空间,只需要一个交换变量,因此其空间复杂度为O(1)。 在选择排序算法中,算法复杂度是一个重要的知识点。简单选择排序算法的执行时间并不依赖于输入的...
选择排序是一种简单的排序算法,它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,然后放到已排序序列的末尾。...
### 数据结构之选择排序 #### 一、选择排序概述 选择排序是一种简单直观的比较排序算法。它的工作原理是:遍历数组中的所有元素,找到其中最小(或最大)的一个元素,然后将其放到数组的第一个位置;接着,在剩下...