选择排序法与冒泡排序法的区别:
1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要更换位置,选择排序每一轮比较都只更换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
代 码:
一、冒泡排序法
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定义变量及数组为基本整型
printf("请输入7个数:\n");
for(i=1;i<8;i++)
scanf("%d",&a[i]); //从键盘中输入7个数
for(i=1;i<7;i++) //变量i代表比较的次数
for(j=1;j<11-i;j++) //变最j代表每次两两比较的次数
if(a[j]>a[j+1])
{
t=a[j]; //产利用中间变童实现两值互换
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后的顺序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //将冒泡排序后的顺序输出
printf("\n");
return 0;
二、选择排序法
# include <stdio.h>
int main(void)
{
int i, j; //循环变量
int MinIndex; //保存最小的值的下标
int buf; //数据互换时做的中间变换
int a[] = {5, 6, 3, 7, 4, 2, 5, 4, 9, 1, 8, 6};
int n = sizeof(a) / sizeof(a[0]); //存放数组a中元素的个数
for (i=0; i<n-1; ++i) //n个数比较n-1轮
{
MinIndex = i;
for (j=i+1; j<n; ++j) //每轮比较n-1-i次, 找本轮最小数的下标
{
if (a[MinIndex] > a[j])
{
MinIndex = j; //保存小的数的下标
}
}
if (MinIndex != i) /*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/
{
buf = a[MinIndex];
a[MinIndex] = a[i];
a[i] = buf;
}
}
printf("最终排序结果为:\n");
for (i=0; i<12; ++i)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
上一篇
下一篇