首先
我们需要了解选择排序法的原理,这对我们理解掌握选择排序法有很大的帮助。
让我们看个简单的例子。
未交换前
{4,56,15,74,16,1,87}
第一次交换
{1,56,15,74,16,4,87}
第二次交换
{1,4,56,74,16,15,87}
第三次交换
{1,4,15,74,56,16,87}
······
······
最后一次交换
{1,4,15,16,56,74,87}
由以上例子可以知道第一次交换是将第一个元素定为最小值,然后将其他元素依次与第一个元素进行比较,若是比第一个元素小,则与第一个元素交换值,依次循环此做法做到最小值为第一个元素,同理第二次交换是将第二个定为最小值,重复第一次交换的步骤,所以第三次,第四次······直到整个数组的元素按照从小到大排序。(因为此处所举的是从小到大排序的例子,若是需要从大到小排序,则改变if条件即可)
上代码
#include <stdio.h>
int main()
{
int a[] = { 4,56,15,74,16,1,87 };//定义一个整数型数组存放所需要排序的数据
for (int i = 0; i < 7; i++)//第一个for循环是用来控制外层循环次数,因为此处有7个元素,只需要排6次即可,当排到第六个元素的时候,第七个元素自动排好了。
{
for (int j = i + 1; j < 7; j++)//第二个for循环用来控制内层循环次数,每第n次外层循环都要将第n个元素作为最小值,所以m个元素内层排序只需要执行m-n次即可。
{
int min = a[i];
if (a[i] > a[j])
{
a[i] = a[j];//此处交换满足if语句的两者元素的值
a[j] = min;
}
}
}
for (int i = 0; i < 7; i++)
{
printf("%d\n", a[i]);//打印排序好后的数组
}
return 0;
}
由此可见,经过两次for循环的执行,即可达到排序的目的
本人大一学生,才疏学浅,只是想将自己学习的过程遇到的疑问,以及解决的方法分享出来,以便帮助更多和我一样喜欢编程的学生。同时这是我第一次发布博客,请多多指教。