排序 选择排序

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 选择排序相关的知识,希望对你有一定的参考价值。

1. 思路

索引递增,针对每个索引i,查找a[i+1, …n]的最小的数min,然后swap(a[i], a[min]).

2.

template<typename T> //整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能
void selection_sort(std::vector<T>& arr) 
        for (int i = 0; i < arr.size() - 1; i++) 
                int min = i;
                for (int j = i + 1; j < arr.size(); j++)
                        if (arr[j] < arr[min])
                                min = j;
                std::swap(arr[i], arr[min]);
        


void select_sort(int a[], int n)

    int i;        // 有序区的末尾位置
    int j;        // 无序区的起始位置
    int min;    // 无序区中最小元素位置

    for(i=0; i<n; i++)
    
        min=i;

        //找"a[i+1]..a[n]"之间最小元素,并赋给min
        for(j=i+1; j<n; j++)
        
            if(a[j] < a[min])
                min=j;
        

        //若min!=i,则交换 a[i] 和 a[min]。
        //交换后,保证了a[0]..a[i]之间元素有序。
        if(min != i)
            swap(a[i], a[min]);
    

3.

时间复杂度:

空间复杂度:O(1)

稳定的算法,它满足稳定算法的定义:假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。

以上是关于排序 选择排序的主要内容,如果未能解决你的问题,请参考以下文章

排序---选择排序

我终于弄懂选择排序(堆排序)

冒泡排序选择排序插入排序二分法排序快速排序二叉树排序堆排序总结

用选择法对10个整数排序

选择排序

选择排序归并排序快速排序。