逆序對 超快速排序

2021-09-10 17:05:51 字數 1395 閱讀 6000

在這個問題中,您必須分析特定的排序演算法----超快速排序。

該演算法通過交換兩個相鄰的序列元素來處理n個不同整數的序列,直到序列按公升序排序。

對於輸入序列9 1 0 5 4,超快速排序生成輸出0 1 4 5 9。

您的任務是確定超快速排序需要執行多少交換操作才能對給定的輸入序列進行排序。

輸入格式

輸入包括一些測試用例。

每個測試用例的第一行輸入整數n,代表該用例中輸入序列的長度。

接下來n行每行輸入乙個整數ai,代表用例中輸入序列的具體資料,第i行的資料代表序列中第i個數。

當輸入用例中包含的輸入序列長度為0時,輸入終止,該序列無需處理。

輸出格式

對於每個需要處理的輸入序列,輸出乙個整數op,代表對給定輸入序列進行排序所需的最小交換運算元,每個整數佔一行。

資料範圍

0≤n<500000,

0≤ai≤999999999

時/空限制: 7s / 64mb

輸入樣例:59

1054

3123

0輸出樣例:60

典型的純求逆序對的題目。求法:借用了歸併排序的思路,在合併的時候,統計一下逆序對的個數。

**

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

ll merge_sort

(vector

&num,

int l,

int r)

else

}while

(i <= mid) w.

push_back

(num[i++])

;while

(j <= r) w.

push_back

(num[j++])

;for

(i = l, j =

0; j < w.

size()

; i++

, j++

) num[i]

= w[j]

;return res;

}int

main()

cout <<

merge_sort

(num,

0, num.

size()

-1)<< endl;

}}

超快速排序 逆序對

在這個問題中,您必須分析特定的排序演算法 超快速排序。該演算法通過交換兩個相鄰的序列元素來處理n個不同整數的序列,直到序列按公升序排序。對於輸入序列9 1 0 5 4,超快速排序生成輸出0 1 4 5 9。您的任務是確定超快速排序需要執行多少交換操作才能對給定的輸入序列進行排序。輸入格式 輸入包括一...

高階指南 超快速排序(歸併 逆序對)

將陣列切成兩半,然後左邊排完 右邊排完 二分遞迴 合併排列 用臨時陣列 對左右兩邊的數誰大誰進去 對於i,j i j 如果 a i a j 則構成乙個逆序對那思考 歸併排序 你知道左邊乙個單調遞增數列,右邊乙個單調遞增數列,mid是左右分界,屬於左邊,那對於右邊的數a j 而言,在合併的時候,如果發...

演算法高階指南 超快速排序 歸併排序求逆序對

在這個問題中,您必須分析特定的排序演算法 超快速排序。該演算法通過交換兩個相鄰的序列元素來處理n個不同整數的序列,直到序列按公升序排序。對於輸入序列9 1 0 5 4,超快速排序生成輸出0 1 4 5 9。您的任務是確定超快速排序需要執行多少交換操作才能對給定的輸入序列進行排序。輸入格式 輸入包括一...