zoukankan      html  css  js  c++  java
  • SDUT-3399_数据结构实验之排序二:交换排序

    数据结构实验之排序二:交换排序

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数。

    Input

    连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。

    Output

    输出数据占一行,代表冒泡排序和快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。

    Sample Input

    8
    49 38 65 97 76 13 27 49

    Sample Output

    15 9

    Hint

    注意:数据相等时不做交换

    题解:在原来的排序函数上稍微改造就可以了,注意需要两个数组存储原数据,因为第一个函数对数组进行排序后,当前数组已经有序,会影响另外一个排序的统计,所以两个排序函数各用一个数组。
    关于快排的统计,原本以为最后一个(a[i]=x)需要记录的,结果WA了,后来反应过来,快排交换过程是覆盖式的,(a[i]=x)是完成了整个交换过程,不用计数。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int a[112345],b[112345],n,p,q;
    
    void sort(int l,int r)
    {
        if(l>=r)
            return;
        int i = l,j = r;
        int x = a[l];
        while(i<j)
        {
            while(i<j&&a[j]>=x) j--;
            if(a[i]!=a[j])
            {
                a[i] = a[j];
                p++;
            }
            while(i<j&&a[i]<=x) i++;
            if(a[i]!=a[j])
            {
                a[j] = a[i];
                p++;
            }
        }
        a[i] = x;
        sort(l,i-1);
        sort(i+1,r);
    }
    
    void f(int a[])
    {
        int i,j,t;
        for(i=0;i<n-1;i++)
            for(j=0;j<n-i-1;j++)
                if(a[j]>a[j+1])
                {
                    q++;
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
    }
    
    int main()
    {
        int i;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                b[i] = a[i];
            }
            q = p = 0;
            sort(0,n-1);
            f(b);
            printf("%d %d
    ",q,p);
        }
        return 0;
    }
    
  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/10148397.html
Copyright © 2011-2022 走看看