一、前言
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。
二、算法步骤
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
三、代码示例
#include <stdio.h>
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void selection_sort(int arry[], int len)
{
int i, j;
for (i = 0; i < len - 1; i++)
{
int min = i;
for(j = i + 1; j < len; j++)
{
if (arry[j] < arry[min])
{
min = j;
}
}
swap(&arry[min], &arry[i]);
}
}
int main(int argc, char const *argv[])
{
int arry[] = {45, 98, 2, 13, 5, 72};
int len = (int) sizeof(arry) / sizeof(arry[0]);
selection_sort(arry, len);
int i = 0;
for (i = 0; i < len; i++)
{
printf("[%d] => [%d]\n", i, arry[i]);
}
return 0;
}
四、其它
-
什么时候最快
当输入的数据已经是正序时。
-
什么时候最慢
当输入的数据已经是反序时。
-
平均时间复杂度
O(n2)