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;
    }
    
  • 相关阅读:
    how to uninstall devkit
    asp.net中bin目录下的 dll.refresh文件
    查找2个分支的共同父节点
    Three ways to do WCF instance management
    WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
    检查string是否为double
    How to hide TabPage from TabControl
    获取当前系统中的时区
    git svn cygwin_exception
    lodoop打印控制具体解释
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3363510.html
Copyright © 2011-2022 走看看