氣泡排序的過程中每次交換就是消除乙個逆序對,而比較次數由其外層迴圈確定,因為內層是肯定迴圈至結束的。
用了歸併排序求逆序對,樹狀陣列求乙個數的最大逆序對數。內部迴圈的次數為n-1,n-2.....n-m 數列求和。
**如下,大家可以測試下。
#include#include#include#include#include#define lowbit(x) (-x)&(x)
#define n 110
#define m 100
using 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)//歸併排序求逆序數
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)
}int getsum(int n)
return res;
}int main()
vis[x]=1;
num[i]=x,tmp[i]=x;
coutif(tag) break;
}//正常的冒泡,以便比較結果 冒泡寫錯好幾次
cout<
排序演算法 穩定性 比較次數 交換次數
本文 無名大盜 在學習排序演算法時,出於效率考慮,經常容易看到演算法的穩定性 比較次數及交換次數研究。特別是考試或者公司筆試題,經常出現這樣的題目。由於排序演算法有很多種,平時提出大家才能說出個大概,但真要考查這些細節,估計很多人都說不準確。博主下決心寫此文章,徹底探查清楚這些問題,與大家共享之。首...
氣泡排序中資料交換的次數
problem description 聽說過氣泡排序麼?一種很暴力的排序方法。今天我們不希望你用它來排序,而是希望你能算出從小到大氣泡排序的過程中一共進行了多少次資料交換。input 輸入資料的第一行為乙個正整數 t 表示有 t 組測試資料。接下來t行,每行第乙個整數n,然後有n個整數,無序。0o...
氣泡排序的交換次數 樹狀陣列
計算氣泡排序的交換次數 逆序數概念 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序 乙個排列中所有逆序個數總和叫做這個排列的逆序數。所以氣泡排序結束即是所有的逆序數為0 思路 暴力 我們要計算逆序數,即使要統計出該值位置之前有多少個數比他大.我們用 ...