c语言实现选择排序算法

选择排序

选择排序(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会继续递增,所以不会影响以前已经排好的。

其实这里说再多,有时候只会越说越乱,主要还是依靠看代码以及示意图去自行领会。

相关文章