基础算法之选择排序Selection Sort

原理

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。一种简单直观的排序算法。

例子

将数组[3,6,4,2,5,1]进行从大到小排序

排序步骤:

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

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

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

第二趟找到剩余[6,4,2,5,3]数字里的最小数2,与当前数组的首位数字进行交换

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

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

第三趟找到剩余[4,6,5,3]数字里的最小数3,与当前数组的首位数字进行交换

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

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

第四趟找到剩余[6,5,4]数字里的最小数4,与当前数组的首位数字进行交换

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

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

第五趟找到剩余[5,6]数字里的最小数5,本来就在首位,无须交换

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

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

至此,排序完毕,输出最终结果1 2 3 4 5 6

动画演示

代码参考

        static void Main(string[] args)
        {
            int[] intArray = { 3, 6, 4, 2, 5, 1 };
            Selection_Sort(intArray);

            foreach (var item in intArray)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

        static void Selection_Sort(int[] unsorted)
        {
            int min, temp;
            for (int i = 0; i < unsorted.Length - 1; i++)
            {
                min = i;

                // 取得当前数组最小值的位置
                for (int j = i + 1; j < unsorted.Length; j++)
                {
                    if (unsorted[min] > unsorted[j])
                    {
                        min = j;
                    }
                }

                if (min != i)
                {
                    temp = unsorted[i];
                    unsorted[i] = unsorted[min];
                    unsorted[min] = temp;
                }
            }
        }

参考资料

维基百科http://en.wikipedia.org/wiki/Selection_sort

时间: 2024-10-29 11:29:43

基础算法之选择排序Selection Sort的相关文章

【排序算法】选择排序(Selection sort)

0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n-1 次交换.在所有的完全依

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

经典排序算法 - 选择排序Selection sort 顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的无序数组说,你们谁最小出列,站到最后边 再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大 举例 先说看每步的状态变化,后边介绍细节,现有无序数组[6 2 4 1 5 9] 第一趟找到最小数1,放到最前边(与首位数字交换) 交换前

java基础算法之选择排序

选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 时间复杂度  选择排序的交换操作介于 0 和 (n - 1) 次之间.选择排序的比较操作为 n (n - 1) / 2 次之间.选择排序的赋值操作介于 0 和 3 (n - 1) 次之间.比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(

基础算法之选择排序

今天看了一下选择排序,在这里记录下学习结果 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次

选择排序 Selection Sort

选择排序算法的运作如下: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完. 选择排序算法的实现我放在这里. 时间/空间复杂度: 选择排序的交换操作介于0和(n-1)次之间.选择排序的比较操作为n(n-1)/2次之间.选择排序的赋值操作介于0和3(n-1)次之间. 比较次数O(n^2),交换次数O(n),最好情况是已经有序,交换0次:最坏情况是逆序,交换n-1次.交换次数比冒泡排序少,由 于交换所需CPU时间比比较所需的CPU时间

基础算法之选择排序算法

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 代码: >>> def select_sort(array): for i in range(len(array)-1): for j in range(i+1,len(array)): if array[i] > array[j]: temp = array

选择排序算法---直接选择排序和堆排序

本文主要是解析选择排序算法:直接选择排序和堆排序. 一.直接选择排序   基本思想:       选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终

[排序算法二]选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的个数为零.选择排序是不稳定的排序方法. 算法性能 时间复杂度:O(n^2),总循环次数 n(n-1)/2.数据交换次数 O(n),这点上来说比冒泡排序要好,因为冒泡是把数据一位一位的移上来,而选择排序只需要在子循环结束后移动一次

初级排序算法之选择排序

初级排序算法 本质是对要排序的数组进行嵌套循环,内层循环负责局部的排序,外层循环负责剩余的无序元素的递减.所以你只要理解嵌套循环和比较大小就能很快的掌握初级排序算法. 选择排序 一个无序的数组 a = [0, 4, 6, 3, 8, 2, 3, 9], 你也可以把a的元素想象成任何现实中可比较的具体物体.例如,有10根长短不一的木条,我们如何对它们进行排序?一个最直接的思想,先拿出最短的放到最前面,在剩余的木条中再拿出最短的放在第二位...直到最后一根木条.从中我们可以看出,1. 我们需要再一次