数据结构实验之排序二:交换排序
来源:互联网 发布:java string 倒序 编辑:程序博客网 时间:2024/05/21 13:16
数据结构实验之排序二:交换排序
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
注意:数据相等时不做交换
#include<bits/stdc++.h>
using namespace std;
int n, s[100010], num1, num2, a[100010];
void f1(int s[], int l, int r)
{
int x = s[l], i = l, j = r;
if(l >= r) return;
while(i < j)
{
while(i < j && s[j] >= x) j--;
s[i] = s[j];
if(i < j) num1++;
while(i < j && s[i] <= x) i++;
s[j] = s[i];
if(i < j) num1++;
}
s[i] = x;
f1(s,l,i-1);
f1(s,i+1,r);
}
void f2(int s[], int n)
{
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])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
num2++;
}
}
}
}
int main()
{
int i;
while(cin>>n)
{
for(i = 0; i < n; i++)
{
cin>>s[i];
a[i] = s[i];
}
num1 = 0;
num2 = 0;
f2(s,n);
f1(s,0,n-1);
cout<<num2<<' '<<num1<<endl;
}
return 0;
}
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- kafka连接问题
- Caffe Python接口
- 数据文件online和offline
- 常用SQL查询
- ubuntu中遇到dpkg的问题
- 数据结构实验之排序二:交换排序
- C++中关键字explicit
- javascript模板引擎template.render使用
- KEIL工程目标选项配置
- Zookeeper集群模式安装
- 在Windows批处理文件中引用日期和时间的方法
- git submodule删除后重新添加问题
- hibernate新增一条带有外键的数据记录的时候,一定要先将外键对应的对象持久化
- Android zip STORE方式存储文件和文件夹