数据结构实验之排序二:交换排序
来源:互联网 发布:dave 2d 知乎 编辑:程序博客网 时间:2024/05/05 18:31
数据结构实验之排序二:交换排序
Time Limit: 1000MS Memory limit: 65536K
题目描述
冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数。
输入
连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。
输出
输出数据占一行,代表冒泡排序和快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。
示例输入
849 38 65 97 76 13 27 49
示例输出
15 9
提示
注意:数据相等时不做交换
来源
xam
示例程序
#include <stdio.h>int num1;int f1(int a[],int l,int r){ if(l<r) { int i=l,j=r; int v=a[i]; while(i<j) { while(i<j&&v<=a[j]) { j--; } if(a[i]!=a[j]) num1++; a[i]=a[j]; while(i<j&&v>=a[i]) { i++; } if(a[i]!=a[j]) num1++; a[j]=a[i]; } a[i]=v; f1(a,l,i-1); f1(a,i+1,r); }}int f2(int n,int b[]){ int i,j,t,num2=0; for(i=0; i<n-1; i++) for(j=0; j<n-i-1; j++) { if(b[j]>b[j+1]) { t=b[j]; b[j]=b[j+1]; b[j+1]=t; num2++; } } return num2;}int main(){ int i,n,m,v; int a[100000]; int b[100000]; while(~scanf("%d",&n)) { for(i=0; i<n; i++) { scanf("%d",&a[i]); b[i]=a[i]; } int s2=f2(n,b); printf("%d ",s2); num=0; f1(a,0,n-1); printf("%d\n",num1); } return 0;}
0 0
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- Elasticsearch搜索安装和使用
- hdu1171 01背包 | 多重背包
- php数组函数
- Oracle解锁表被锁
- mybatis 一对多,多对一配置
- 数据结构实验之排序二:交换排序
- 706C. Hard problem
- poj 3469 Dual Core CPU ( 最小割)
- POJ-3026 Borg Maze (BFS+最小生成树)
- Android入门学习--之HTML
- 基于quartz的动态任务
- Spring安全权限管理(Spring Security的配置使用)
- HDU-3874 Necklace(线段树)
- JDBC预编译语句