冒泡排序中交换次数与比较次数
来源:互联网 发布:珠海办公软件培训 编辑:程序博客网 时间:2024/06/08 14:09
冒泡排序的过程中每次交换就是消除一个逆序对,而比较次数由其外层循环确定,因为内层是肯定循环至结束的。
用了归并排序求逆序对,树状数组求一个数的最大逆序对数。内部循环的次数为n-1,n-2.....n-m 数列求和。
代码如下,大家可以测试下。
#include<cstdio>#include<iostream>#include<cstdlib>#include<cstring>#include<ctime>#define lowbit(x) (-x)&(x)#define N 110#define M 100using namespace std;int num[N];int use[N];int tmp[N];int vis[N];int sum[N];int antinum;void mergesort(int l,int r)//归并排序求逆序数{ if(l>=r) return; int mid=(l+r)>>1; mergesort(l,mid); mergesort(mid+1,r); int st=l,mt=mid+1,k=l; while(st<=mid && mt<=r) { if(tmp[st]<=tmp[mt]) use[k++]=tmp[st++]; else use[k++]=tmp[mt++],antinum+=mid-st+1; } while(st<=mid) use[k++]=tmp[st++]; while(mt<=r) use[k++]=tmp[mt++]; while(l<=r) tmp[l]=use[l],l++;}void up(int n,int x){ while(n<=M) { sum[n]+=x; n+=lowbit(n); }}int getsum(int n){ int res=0; while(n>0) { res+=sum[n]; n-=lowbit(n); } return res;}int main(){ srand( time(NULL) ); antinum=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=M;i++) { int x=rand()%M+1; if(vis[x]) {i--;continue;} vis[x]=1; num[i]=x,tmp[i]=x; cout<<x<<endl; } int antimax=0; for(int i=1;i<=M;i++)//树状数组求一个数的最大逆序数对 { antimax=max(antimax,i-getsum(num[i]-1)); up(num[i],1); } mergesort(1,M); int m=antimax*(2*M-1-antimax)/2; int u=0,v=0; for(int i=1;i<M;i++) { int tag=1; for(int j=1;j<M-i+1;j++,v++) if(num[j]>num[j+1]) u++,swap(num[j],num[j+1]),tag=0; if(tag) break; }//正常的冒泡,以便比较结果 冒泡写错好几次 cout<<u<< " "<<v<<endl; cout<<antinum<<" "<< m<<endl; return 0;}
0 0
- 冒泡排序中交换次数与比较次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序中数据交换的次数
- 冒泡排序的交换次数
- 冒泡排序的交换次数
- 冒泡排序初次建表比较和交换次数分析
- 冒泡排序(优化版)的比较次数和交换数字次数 逆序数+树状数组
- 冒泡排序中数据交换的次数(sdu2554
- UVA 299- Train Swapping(冒泡排序中交换次数)
- 冒泡排序中数据交换的次数 (sdut oj)
- SDUT-2554 冒泡排序中数据交换的次数
- 用git还原之前的版本到一个特定的文件夹
- HDU 3342 Legal or Not
- nachos课程设计 task1.2
- linux socket 程序 SIGPIPE 和GDB的问题
- vmware使用
- 冒泡排序中交换次数与比较次数
- Makefile条件编译debug版和release版
- Swift 元组
- 赋予权限
- 关于JS获取时间的总结
- 分离正整数中的各位数
- gdb core文件调试
- scons简介
- QQ和微信差在哪儿?