冒泡排序的交换次数

来源:互联网 发布:临沂淘宝培训 编辑:程序博客网 时间:2024/05/21 10:04

通过另建一个数组,按排好序后的位置来存放数字,这个新数组建成树状数组的形式,优化复杂度。

#include<stdio.h>#include<string>#define N 100005int n;int bit[N];int a[N];int sum(int i) {int s=0;while(i>0) {s+=bit[i];i-=i&-i;}return s;}void add(int i,int x) {while(i<=n) {bit[i]+=x;i+=i&-i;}}void solve() {int ans=0;int j;for(j=0;j<n;j++) {ans+=j-sum(a[j]);add(a[j],1);}printf("%d\n",ans);}int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifscanf("%d",&n);int i;for(i=0;i<n;i++) {scanf("%d",&a[i]);}solve();return 0;}


0 0