[Algorithm] Selection Sort

选择排序的概念

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

选择排序的主要特点与数据移动有关,如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

选择额排序的复杂度

最坏时间复杂度:O(n^2)

最优时间复杂度:O(n^2)

平均时间复杂度:O(n^2)

空间复杂度:O(n)total。O(1)auxiliary。

排序示意图

选择排序算法代码

template<typename T>
void selection_sort(std::vector<T>& arr) {
    for (int i = 0; i < arr.size() - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < arr.size(); j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
            std::swap(arr[i], arr[minIndex]);
        }
    }
}
时间: 2024-10-10 16:08:59

[Algorithm] Selection Sort的相关文章

数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)

数据结构 - 只需选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601965 选择排序(selection sort) : 每一趟在n-i+1个记录中选取keyword最小的记录作为有序序列中第i个记录. 简单选择排序(simple selection sort) : 通过n-i次keyword之间的比較, 从n-i+1个记录中选出keyword最小的记录, 并和第i

简单选择排序(Simple Selection Sort)的C语言实现

简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 1 #include <stdio.h> 2 #define LEN 6 3 4 typedef float keyType; 5 6 typedef struct{ 7 keyType score;

C++&lt;algorithm&gt;中sort的比较函数写法(转)

转自:http://www.wl566.com/biancheng/98907.html C++<algorithm>中sort的比较函数写法,有需要的朋友可以参考下. 定义排序函数: 方法1:声明外部比较函数 bool Less(const Student& s1, const Student& s2) { return s1.name < s2.name; //从小到大排序 } std::sort(sutVector.begin(), stuVector.end(),

数据结构 - 简单选择排序(simple selection sort) 详解 及 代码(C++)

数据结构 - 简单选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601965 选择排序(selection sort) : 每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录. 简单选择排序(simple selection sort) : 通过n-i次关键字之间的比较, 从n-i+1个记录中选出关键字最小的记录, 并和第i个记录交换. 选择排序需

选择排序法(Selection Sort) 复习--附图示说明

先看看图示了解 Selection Sort 是怎麽完成的 最後完成了- 了解了它的行为模式以後,我们可以开始写代码实现了 import java.util.Arrays; public class testMain { public static void main(String[] args) { int[] randArray = new int[] { 2, 0, 1, 3, 9, 8, 6, 5, 4, 7 }; insertionSort(randArray); System.out

selection sort

selection sort 是一种很常见的O(n^2)的排序方法, 现给出其伪码和时间复杂度分析 pseudocode: 上图中,算法伪码的每一步骤最后都有一个执行次数.其中,步骤6-7的执行次数与待定排序的数组有关. 可以证明,情况最坏的时候,k = . 情况最好的时候,k = 0 设这10个步骤,每个步骤的一次执行所花费的时间依次为 C1 → C10 算法执行时间: 最坏情况下: 最好情况下: 算法总的复杂度为 Θ(n2)

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

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

选择排序(Selection sort)

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 简单的可以理解为:将整个数组视为虚拟的有序区和无序区,重复的遍历数组,每次遍历从无序区中选出一个最小(或最大)的元素,放在有序区的最后,每一次遍历排序过程都是有序区元素个数增加,无序区元素个数减少的过程,直到无序区元素个数位0. 选择排序的

comparison algorithm of sort

/*Comparison sort * |---------------------|-----|----------------|---------------|------|----------| | Name |Best | Average |Worst |Memory|Stable? | |---------------------|-----|----------------|---------------|------|----------| |1 Insertion sort |