SDUT-3399-->数据结构实验之排序二:交换排序

来源:互联网 发布:知豆电动车能上高速吗 编辑:程序博客网 时间:2024/05/16 16:22

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

Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic

Problem Description

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

Input

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

Output

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

Example Input

849 38 65 97 76 13 27 49

Example Output

15 9

Hint

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

Author

xam
参考代码:
#include <stdio.h>#include <iostream>using namespace std;int a[100010];int b[100010];int num1,num2;void Qsort(int l,int r){    if(l>=r)        return ;    int k = a[l];    int i = l;    int j = r;    while(i<j)    {        while(i<j && a[j]>=k)            j--;        a[i] = a[j];        if(i!=j)            num1++;        while(i<j && a[i]<=k)            i++;        a[j] = a[i];        if(i!=j)            num1++;    }    a[i] = k;    Qsort(l,i-1);    Qsort(i+1,r);}void Sort(int n){    for(int i=1;i<=n-1;i++)    {        for(int j = 1;j<=n-i;j++)        {            if(b[j]>b[j+1])            {                num2++;                int t = b[j];                b[j] = b[j+1];                b[j+1] = t;            }        }    }}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            b[i] = a[i];        }        num1 = 0;        num2 = 0;        Qsort(1,n);        Sort(n);        printf("%d %d\n",num2,num1);    }    return 0;}

原创粉丝点击