排序 选择排序
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]前面。
以上是关于排序 选择排序的主要内容,如果未能解决你的问题,请参考以下文章