基於相鄰元素交換的排序演算法的下界

2022-07-17 05:21:05 字數 674 閱讀 2639

逆序(inversion)是指序列中具有性質「ia[j]「的序偶(a[i].a[j])。

例如:在序列34,8,64,51,32,21中具有9個逆序:(34,8),(34,32),(34,21),(64,51),(64,32),(64,21),(51,32),(51,21),(32,21);

顯而易見的是,排序完成之後,序列中將不會存在逆序。因此我們可以通過計算序列中的逆序數來及算排序平均執行時間的精確的界。為了可以定義出「平均」,這裡假設序列中不存在重複元素。利用這個假設,設輸入資料是這個序列的某種可能的排列(只有相對順序是重要的),並假設所有的排列都是等可能的。

假設乙個長度為n的序列中的所有序偶都是逆序(乙個單調遞減的序列),那麼其逆序的個數就是序偶的個數n(n-1)/2=(1+2+3+...+n-1),因此平均表擁有該量的一半,即n(n-1)/4的逆序,,而基於相鄰元素交換的排序演算法每次相鄰交換都只能消除乙個逆序。因此演算法需要n(n-1)/4=ω(n^2)次交換。

事實上,一般演算法證明下界要比證明上界難得多。

這個結論的意義在於:乙個排序演算法通過刪除逆序得以向前執行,而為了突破ω(n^2)這個下界,它必須要實現每次交換刪除不止乙個逆序。

交換鍊錶中相鄰的元素

成對交換鍊錶中相鄰的元素 直接交換鍊錶中兩個元素值,給元素交換賦值,而不用改變指標方向 但是這種方法中當單個節點中有很多欄位的時候 比如 name,age,效率較低!package suanfa.warppairs description 兩兩交換鍊錶中相鄰節點 通過直接交換元素值,不改變指標方向的...

交換矩陣行列 不用交換元素 交換行列的輸出編號

題目描述 給定乙個n m的矩陣,要求支援下面的操作 0 x y 交換第x行與第y行 1 x y 交換第x列與第y列 題目連線 input 多組資料。對於每組測試資料,第一行包含三個數n,m,k 1 n,m 1000 1 k 100000 分別表示行數,列數,運算元。接下來n行,每行m個整數,表示初始...

演算法 基於資料交換的排序

public static void sort int array 思路 找到比a i 大的a j 值就進行交換 public static void sort int array 特點 時間複雜度 o n 2 public static void sort int array int flag a...