zoukankan      html  css  js  c++  java
  • BNU4208:Bubble sort

         冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至序列有序,从而完成排序。

    由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。我们现在的问题是,我们用冒泡排序对给定序列排序时所需要的冒泡趟数是多少呢?

    Input

    第一行是测试数据的总组数,总组数不超过100组。

    接下来每个测试数据由两行组成,第一行为序列的长度,序列长度不超过10000,接下来为要处理的序列,序列中没有相同数字,每个数字不超过10000。

    Output

     每组数据对应一行输出,输出趟数。

    Sample Input

    351 2 3 4 543 2 4 122 1

    Sample Output

    031
     
    这道题其实我是靠猜的,趟数必定是现在所在的位置与排序后的位置之差最大的
     
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    int a[10005],hash[10005],now[10005];
    
    int main()
    {
        int n,t,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i = 0; i<n; i++)
            {
                scanf("%d",&a[i]);
                now[a[i]] = i;
            }
            sort(a,a+n);
            for(i = 0; i<n; i++)
                hash[a[i]] = i;
            int maxn = 0;
            for(i = 0; i<n; i++)
            {
                if(now[a[i]]-hash[a[i]]>maxn)
                    maxn = now[a[i]]-hash[a[i]];
            }
            printf("%d
    ",maxn);
        }
    
        return 0;
    }
    
  • 相关阅读:
    点击标签,通过jquery.jcarousel动态axaj加载内容,实现跑马灯效果
    FreeSwitch VoiceMail 语音信箱 研究
    FreeSwitch IVR VoiceMail 语音信箱
    微软企业库连接access,web.config相对路径配置
    FreeSWITCH 添加中文语音包
    FreeSwitch通过远程接口返回动态IVR语音菜单
    FreeSwitch注册上了,但拨打电话,提示Rejcted by acl "domians". Falling back to Digest auth
    ACM:密码截获
    c++ ACM:递归实例
    CSS:浏览器兼容性图表
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3363510.html
Copyright © 2011-2022 走看看