冒泡排序(函数)

2023-12-13 09:07:51

冒泡排序,将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行,直到所有元素都被排序。

15351158361064c65468df5.gif

输入格式:

输入在第1行中给出N(1<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔,并保证数字没有重复的出现。

输出格式:

给出冒泡排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。注意:当排序完成时应立即停止

输入样例1:

7
4 5 7 6 3 2 1

输出样例1:

4 5 6 3 2 1 7
4 5 3 2 1 6 7
4 3 2 1 5 6 7
3 2 1 4 5 6 7
2 1 3 4 5 6 7
1 2 3 4 5 6 7

输入样例2:

6
1 2 3 6 5 4

输出样例2:

1 2 3 5 4 6
1 2 3 4 5 6

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

#include <stdio.h>

void show(int a[], int size);//定义一个用于输出数值的函数
void select(int a[], int size);//定义一个用于排序的函数


int main(void)
{
    int size;
    scanf("%d", &size);
    int a[size];//定义一个长度为size的数组
    for(int i = 0; i < size; i++)
    {
        scanf("%d", &a[i]);//输入size个数
    }
    select(a,size);//对这组数进行排序
    return 0;
}

void select(int a[], int size)//定义一个用于排序的函数
{
    for(int i = 1; i <= size - 1; i++)//外循环size-1次,第一次循环将最大的数排在最右边,第二次将第二大的排在倒数第二,以此类推
    {
        int flag = 0;//定义一个标志
        for(int j = 0; j < size - i; j++)//内循环找到前size-i中的最大数
        {
            if(a[j] > a[j + 1])//比较a[j]与其后一个数的大小
            {
                int temp = a[j];//交换较大数位置
                a[j] = a[j + 1];
                a[j + 1] = temp;
                flag = 1;//如果交换了位置就让flag=1
            }
        }
        if(flag == 0)
        {
            break;
        }
        show(a, size);//输出每一下交换位置后的值
    }
}

void show(int a[], int size)//输出每一次交换后的数值
{
    printf("%d", a[0]);
    for(int i = 1; i < size; i++)
    {
        printf(" %d", a[i]);
    }
    printf("\n");
}

文章来源:https://blog.csdn.net/2302_80325489/article/details/134958802
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。