选择排序(代码实现)
来源:互联网 发布:衣柜板材 知乎 编辑:程序博客网 时间:2024/06/08 09:55
选择排序总的思路就是先扫一遍带排序的数列,找出最小的数(这个过程就是先第一个与第二个比较,找出两数最小数,再拿第三个数和前面找出的最小数比较,找出三个数的最小数,然后再拿第四个数和最小数比较,以此类推,找完整个数列,找出最小数),找出最小数之后,把最小数与第一个数交换位置。假设数列有n个数,那么接下来就是重复上面的找出最小的数放到第一个位置(与第一位置的数交换),只不过上一轮操作,但找的是后面n-1个数的最小数,也就是第二小的数,(前面的第1个数已经排好)。找到后交换到第二个位置。继续第三轮循环。以此类推
综上,第一轮操作循环(i的所在for循环)从a[0]开始,找的是第i小的位置,第一次找的第0小(由于为了贴合数组从0开始,只能这么叫了)的数字,放到a[0]所在位置,第二次找第1小,放到a[1]的位置。所以第i次循环就找第i小,放到a[i]的位置,就是与a[i]的那个数交换。
那么再来说说第二重循环,比较循环(j所在循环)。min=i,就是先假设第0个数是最小的,所以从j=i+1开始,用接下来的数与a[min]比较,如果有比a[min]更小的数, 那么a[min]就更新(赋最新的最小值给a[min],更换下标就好(min=j))。如果最小值一开始没有排序好(即a[min]的值不在正确的位置上) ,因为经过前面的一连串操作,那么min的值一定有所改变,不再等于原来的值 i 了(一开始min=i),所以if( i !=min),执行交换位置的操作,把不对的最小的那个数换到正确的位置来。如果i=min,说明你要找的最小数在正确的位置上,不需要交换操作了
//选择排序,这里以6个数的排序为例
#include <stdio.h>
int
main (
void
)
{
int
a[
6
],i,j,mid,min;
printf(
"请输入需要排序的6个数\n"
);
for
(i=
0
;i<
6
;i++)
scanf(
"%d"
,&a[i]);
for
(i=
0
;i<
5
;i++)
//操作循环,6个数字做5次循环操作
{
min=i;
//既先设最小的数为a[i]
for
(j=i+
1
;j<
6
;j++)
//比较循环,第i个以前的数已排好,从第i+1个开始比较
if
(a[min]>a[j])
//如果发现比min小的数,则新设定最小值min
min=j;
mid=a[min];
//交换a[min]和a[i],既将此轮比较中最小的数放在前面
a[min]=a[i];
a[i]=mid;
}
printf(
"排序好的6个数为:\n"
);
for
(i=
0
;i<
6
;i++)
printf(
"%d,"
,a[i]);
printf(
"\n"
);
return
0
;
}
阅读全文
0 0
- 选择排序(代码实现)
- 选择排序代码实现
- 选择排序(解析及代码实现)
- 选择排序(php代码实现)
- Java 实现选择排序代码
- 选择排序-c++代码实现
- 排序总结(代码实现):选择排序,插入排序,归并排序,快速排序,堆排序
- 简单选择排序和堆选择排序代码实现
- 简单选择排序和二元选择排序的代码实现
- 选择排序(伪代码算法,c++,以及python实现)
- 选择排序及C++/java代码实现(SelectSort)
- 选择排序的c实现代码
- java代码实现选择法排序
- 用JAVA代码实现选择排序
- Java代码 实现直接选择排序
- 选择排序原理及代码实现
- 选择排序的Java代码实现
- Java中选择排序的代码实现
- Angular购物车模拟
- 二叉树的顺序存储
- Codeforces 879-B. Table Tennis
- recyclerView死数据的瀑布流
- Linux下安装Tomcat
- 选择排序(代码实现)
- 圆柱的体积
- 继承
- [RE]Reversing.Kr的Easy ELF
- Linux管道及重定向
- 常用指令 参考《鸟哥的Linux私房菜+基础学习篇 第三版》
- 打印100以内的素数
- maven闪退
- 使用recycleview,okhttp实现购物车