选择排序(Selection sort)
-
概述
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。 -
选择排序是不稳定的排序方法。
-
适用于规模n较小的排序。
-
类似冒泡排序,但又不同。
抽象
左右两个容器,左边是已经排序好的序列,右边是未排序好的序列
---------------------------------------------------------------------------
数组 | 已排序 | 未排序 |
---------------------------------------------------------------------------
实现
C版本
void swap(int* a, int* b)
{
int temp = *b;
*b = *a;
*a = temp;
}
void selection_sort(int arr[], int len)
{
int i, j;
for(int i = 0; i < len - 1; i++) //len - 1即可完成所有比较
{
int min = i; //初始左边空的有序序列
for(int j = i+1; j < len; j++)
{
if(a[j] < arr[min]) //交换最小值擂主下标
min = j;
}
swap(&arr[min], &arr[i]); //无序序列中的最小值->有序序列末尾
}
}
C++版本
template<template T>
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[i])
min = j;
}
std:swap(arr[i], arr[min]);
}
}