陣列的逆序度 用氣泡排序方法超時了,該怎麼辦?

2021-10-05 10:18:40 字數 1533 閱讀 5284

leetcode 上有這麼一道題目,逆序度

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

示例 1:

輸入: [7,5,6,4] 輸出: 5

逆序對:7-5, 7-6, 7-4, 5-4, 6-4

我上手就用氣泡排序的思想,來做,不成想超時了……

public

intreversepairs

(int

nums)}}

return count;

}

氣泡排序:時間複雜度 o(n^2),空間複雜度o(1),超時只說明思路是對的。然後看了題解,要用歸併排序

public

intreversepairs

(int

nums)

private

intrecursion

(int

nums,

int begin,

int end,

int[

] temp)

int mid =

(end - begin)/2

+ begin;

int before =

recursion

(nums, begin, mid, temp)

;int after =

recursion

(nums, mid +

1, end, temp)

;int m =

merge

(nums, begin, mid, end, temp)

;return before+after+m;}/*

將有序的兩列合併為列

*/private

intmerge

(int

nums,

int begin,

int mid,

int end,

int[

] temp)

else

}// 右邊的元素有剩餘,一次性複製到臨時陣列中

if(before == mid +1)

// 左邊的元素有剩餘,一次性複製到臨時陣列中

if(after == end +1)

// 將排好序的元素,複製到源陣列中(覆蓋)

system.

arraycopy

(temp, begin, nums, begin, end - begin +1)

;return count;

}

歸併排序,時間複雜度o(logn),空間複雜度o(n),通過了。 其實核心就是在歸併排序中,加了一行**來計算逆序度「count += mid - before + 1;」

陣列氣泡排序,選擇排序,逆序,折半查詢,遍歷方法

public class hello2 呼叫方法是有先後順序的 xuanze arr maopao arr nixu arr bianli arr int index zheban arr,5 system.out.println index 折半查詢方法 其陣列必須是有序資料從小到達排列 publ...

一維陣列的排序方法 氣泡排序

new arr new乙個新的陣列 分析 1.像金魚吐泡泡一樣,水底 水面,泡泡也是小 大的。氣泡排序法 每次都從第乙個元素開始比較,相鄰兩個元素排序,如果前 後,則調換位置,最終最大的數字會出現在最後一位。2.陣列 arr 排序,每次迴圈都從第乙個陣列開始 第1次氣泡排序結果 3,2,1,4 紅色...

用氣泡排序法對陣列中的元素排序

注 此處以公升序排枚舉例 共10個元素 2 4,3,5,8,6,1,7,9,0 要將其公升序排列 1.將第乙個元素與其後的每個元素進行比較 2與4比較 2 4 將這兩個值交換 4,2,3,5,8,6,7,9,0 交換後2位於第二個元素位置處,2與3比較 2 3 交換 4,3,2,5,8,6,7,9,...