逆序數的求法

2022-05-30 13:39:08 字數 1112 閱讀 7719

求乙個數列的逆序數

逆序對:數列s[1],a[2],a[3]…中的任意兩個數s[i],s[j] (is[j],那麼我們就說這兩個數構成了乙個逆序對

逆序數:乙個數列中逆序對的總數

(5,4)是乙個逆序對,同樣還有(3,2),(5,2),(4,2)等等

那麼如何求得乙個數列的逆序數呢?

方法1:乙個乙個的數

最簡單也是最容易想到的方法就是,對於數列中的每乙個數s[i],遍歷數列中的數s[j](其中j該方法的時間複雜度為o(n2),具體過程就不細說了

**如下:(poj  1804 brainman)

/*

直接求逆序數o(n^2)

*///

memory time

//220k 188ms

#include

using

namespace

std;

int main(int i,intj)

return0;

}

方法2:歸併的思想

有一種排序的方法是歸併排序,歸併排序的主要思想是將整個序列分成兩部分,分別遞迴將這兩部分排好序之後,再和並為乙個有序的序列.複雜度為o(nlogn)演算法

/*

借助mergesort求逆序數o(nlogn)

*///

memory time

//228k 172ms

#include

using

namespace

std;

const

int inf=1000001

;int t; //

數字序列s的逆序數

void compute_t(int* s,int top,int mid,int

end)

delete

left;

delete

right;

return;}

void mergesort(int* s,int top,int

end)

return;}

int main(void

)

return0;

}

逆序數及其求法

1.逆序數 所謂逆序數,就是指乙個序列s i 統計處於序列的每個數的比這個數大並且排在它前面的數的數目,然後對於所有數,把這個數目加起來求和就是了。比如4 3 1 2 4第乙個,所以數目為0 3的前面是4,大於3的數目為1 1的前面是4 3 大於1的數目為2 2的前面是4 3 1,大於2的數目為2 ...

逆序數的幾種求法

求乙個數列的逆序數 逆序對 數列a 1 a 2 a 3 中的任意兩個數a i a j i,如果a i a j 那麼我們就說這兩個數構成了乙個逆序對 逆序數 乙個數列中逆序對的總數 如數列3 5 4 8 2 6 9 5,4 是乙個逆序對,同樣還有 3,2 5,2 4,2 等等 那麼如何求得乙個數列的逆...

逆序數的幾種求法

求乙個數列的逆序數 逆序對 數列a 1 a 2 a 3 中的任意兩個數a i a j i,如果a i a j 那麼我們就說這兩個數構成了乙個逆序對 逆序數 乙個數列中逆序對的總數 如數列3 5 4 8 2 6 9 5,4 是乙個逆序對,同樣還有 3,2 5,2 4,2 等等 那麼如何求得乙個數列的逆...