《演算法競賽高階指南》 超快速排序

2021-09-26 14:56:38 字數 999 閱讀 3698

歸併排序模板

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

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

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

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

輸入格式

輸入包括一些測試用例。

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

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

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

輸出格式

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

資料範圍

0≤n<5000000≤n<500000,

0≤ai≤9999999990≤ai≤999999999

輸入樣例:59

1054

3123

0輸出樣例:60

#include.h>

using namespace std;

const

int maxn=

501000

;#define ll long

long

ll n,m,i,j,a[maxn]

,b[maxn]

,cnt;

void

merge

(ll a[

],ll l, ll r)

//歸併排序可以快速的排序還可以記錄原陣列的逆序對數

}for

(ll k=l;k<=r;k++

) a[k]

=b[k]

;//合併的陣列賦值給原陣列

}int

main()

return0;

}

《演算法競賽高階指南》排序 貨倉選址

在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。第一行輸入整數n。第二行n個整數a1 an。輸出乙個整數,表示距離之和的最小值。1 n 10000...

《演算法競賽高階指南》排序 貨倉選址

在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。第一行輸入整數n。第二行n個整數a1 an。輸出乙個整數,表示距離之和的最小值。1 n 10000...

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

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