选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
过程演示:
实例:
//选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
#include
void main()
{
int i,j,temp;
int a[]=;
int len=8;
/*
len - 1:
当前面都是最小的数字了,则最后还剩一个数就没有比较的必要了,最后一个数字已经和len-2那个数字进行了比较
*/
for (i = 0 ; i < len - 1 ; i++)
{
//每次假定当前i是最小值
int min = i;
// 访问未排序的元素
for (j = i + 1; j < len; j++)
{
//找到剩下的未排序元素中的最小值
if (a[j] < a[min])
{
//记录实际的最小值(或剩下元素中的最小值)
min = j;
}
}
/*
如果实际的最小值(或剩下元素中的最小值)的索引与当前索引不同
则当前索引不配做最小值,应该交换
*/
if(min != i)
{
// 交换两个变量
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
//遍历结果
for(int x=0;x
printf("%d ",a[x]);
}
}
在具体代码中,这个实现思路是外层循环对于每个外层循环变量i都先假认为是最小那个值对应的索引,然后内层循环的时候找到真正的比这个外面的最小值小的,则最小值的索引就重新赋值,等内层循环结束后,就判断外层循环变量i和最小值索引是否相同,若相同,则不需要交换,若不相同,则交换,因为内层循环每次循环的是剩下没有排序的,而已经排序的每次都会在最左边,所以交换之后i会继续递增,所以不会影响以前已经排好的。
其实这里说再多,有时候只会越说越乱,主要还是依靠看代码以及示意图去自行领会。