**
冒泡排序和选择排序的区别
**
初学c语言不久,发现好多同学对选择排序和冒泡排序傻傻分不清楚,在这里斗胆对它们的区别作出解释,也是对自己的学习成果作出检验,欢迎个位作出批评指正。
冒泡排序用简单的话来讲就是,从左往右,两两相互比较大小,左边的大就交换位置,循环往复,把较大的放后面。
下面是冒泡排序图解
下面是冒泡排序代码实现
//冒泡排序
#include<stdio.h>
#define N 6
void main()
{
int A[N] = {6,32,89,28,66,100},i,j,iTmp;//iTmp是指临时变量
for(i = 0;i < N - 1;i++)//这里控制比较的轮数,一共要比较 N - 1轮
{
for(j = i+1;j < N;j++)//这里控制每轮比较的次数 ,每经历一轮,比较的个数少一个
{
if(A[i] > A[j])//这里指左边比右边大的话就交换位置
{
iTmp = A[i];
A[i] = A[j];
A[j] = iTmp;
}
}
}
for(i = 0;i < N;i++)
{
printf("%d ",A[i]);//最后输出这个排好序的数组
}
}
选择排序
也用简单的话来说,就是从第一个数开始,与后面所有的数相比较,找出最小的数,放在第一个位置,以此类推,每一轮确定一个相对于这一轮最小的数。
下面是选择排序图解
下面是选择排序的代码实现:
//选择排序
#include<stdio.h>
#define N 6
void main()
{
int A[N] = {6,32,89,28,66,100},i,j,iTmp;//iTmp是指临时变量
for(i = 0;i < N - 1;i++)//这里控制比较的轮数,一共要比较 N - 1轮
{
for(j = i+1;j < N;j++)//这里控制每轮比较的次数
{
if(A[i] < A[j])//这里指找出最小值之后,就交换
{
iTmp = A[i];
A[i] = A[j];
A[j] = iTmp;
}
}
}
for(i = 0;i < N;i++)
{
printf("%d ",A[i]);//最后输出这个排好序的数组
}
}
最后,总结一下冒泡和选择的区别:
冒泡排序是左右两个数相比较,而选择排序是用后面的数和每一轮的第一个数相比较;
冒泡排序每轮交换的次数比较多,而选择排序每轮只交换一次;
冒泡排序是通过数去找位置,选择排序是给定位置去找数;
当一个数组遇到相同的数时,冒泡排序相对而言是稳定的,而选择排序便不稳定;
在时间效率上,选择排序优于冒泡排序。
以上就是我对冒泡排序和选择排序区别的理解,如果有错误,欢迎个位大佬指正。