选择排序法与冒泡排序法对比

技术博客 (244) 2023-12-17 09:01:02

选择排序法与冒泡排序法的区别:
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;
}

 

THE END

发表回复