HOJ 3268 冒泡排序最少次数

该博客讨论了冒泡排序算法,在最理想情况下需要的最少排序趟数。举例说明了一个包含4个元素的数组如何在两趟排序后变得有序,并指出只需考虑升序排列的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description

对于冒泡排序,输出最少需要几趟就可以将数组有序。比如对于数组1 3 4 2,经过第一趟排序之后是1 3 2 4,

经过第二趟排序之后是1 2 3 4;那么只需要两趟排序就可以使得数组有序。

Input

多组样例。每组的第一个数是一个数字n表示数组的元素个数,后面是n个整数。1<=N<=1000


Output

经过多少趟冒泡排序可以使得数组有序。


Sample Input

4 1 3 4 2

Sample Output

2

Hint

只需考虑升序情况

#include <stdio.h>
#include <stdlib.h>

int bubble(int arr[],int times);
int main()
{
    int n;
    int i;
    int arr[1002];
    while(scanf("%d",&n)!=EOF)
    {
        for(i = 0;i < n; i++)
        {
            scanf("%d",&arr[i]);
        }
        printf("%d\n",bubble(arr,n));
    }
    return 0;
}
int bubble(int arr[],int times)
{
    int tmp = 0;
    int ans = 0;
    int state = 1;
    for(int i = 0;i < times - 1;i++)
    {
        if(state == 1)
        {
            state = 0;
            for(int j = 0;j < times - i - 1;j++)
            {
                if(arr[j] > arr[j+1])
                {
                    tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    state = 1;
                }
            }
        }
        else break;
        ans = i;
    }
    return ans;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值