有關時間複雜度的總結:
t(n) = o(f(n)); 這個表示上屆,也有π表示下屆,還有表示上下界的(sata)
首先感謝蕭神的認證準備。
給定乙個序列,a1,
a2,……,
an,如果存在i並且
ai>
aj,那麼
我們稱之為逆序對,求逆序對的數目。
方法一:最簡單的暴力方法:
o(n^2)
方法二:
歸併排序的思路:
歸併排序是通過分治,然後歸併兩個有序的序列成乙個有序序列。現假設兩段有序序列分別是
[beg,mid]和
[mid+1,end
],在歸併過程中(
i,j分別為兩段序列的下標),如果a[i
],則不會產生逆序對;但當a[i
]>a[j]
時,就出現逆序對了,出現了多少?既然
[beg,mid
]是有序的,那麼[i
-mid]
序列就都能與
a[j]
構成逆序對,故:
mid-i+1
我們只需要在歸併排序的
merge
函式中新增一
句**:
sum += mid –
i+1
時間複雜度
o(nlogn)
還有couting sort, radix sort, bucket sort 沒有看。
快速排序
快速排序最重要的就是partition函式了,這個有很多種方法,都是大同小異。
#include
using namespace std;
// from introduction to algorithm v3 p170
// 殷人昆版和劍指offer上的演算法跟這個大體類似
int partition_fun(int* array, int from, int to)
}swap(array[small+1], array[to]);
return small+1;
}void quicksort(int* array, int from, int to)
}int main();
quicksort(array, 0, sizeof(array)/sizeof(int)-1);
for(int i = 0; i < sizeof(array)/sizeof(int); i++)
cout << array[i] << " ";
cout << endl;
}
加油!
(排序)快速排序QuickSort
主要內容 1 演算法思想 2 快速排序演算法 3 劃分演算法partition 4 快排過程 5 完整 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思...
快速排序 QuickSort
快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...
快速排序 quicksort
快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...