简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。
在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小元素的数组下标,当轮循环结束之后,那这个变量存储的就是当前最小元素的下标,此时再执行交换操作即可。代码实现很简单,一起来看下。
#include <stdio.h>
#include <stdbool.h>
void select_sort(int value[],int n)
{
int i = 0;
for(i = 0;i < n - 1;i++)
{
int j = i;
int min_index = i;//记录最小值的下标
for(j = i + 1;j < n;j++)
{
if(value[j] < value[min_index])
{
min_index = j;
}
}
if(min_index != i)//将最小值放在正确的位置
{
int temp = value[i];
value[i] = value[min_index];
value[min_index] = temp;
}
}
}
int main()
{
int value[] = {8,6,3,7,4,5,1,2,10,9};
int n = 10;
select_sort(value,n);
printf("排序结果为:\n");
int i = 0;
for(;i < n;i++)
{
printf("%d ",value[i]);
}
printf("\n");
return 0;
}

简单选择排序是一种选择排序。
选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
简单排序处理流程
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

直接选择排序和冒泡排序很像,不同的是冒泡排序要比较每两个相邻的元素并且交换(如果需要),而直接选择排序则只需要将选择出来的最小值与它应该所在的位置上的数进行交换即可。

