排序整理 quick sort

2021-06-22 04:49:23 字數 1316 閱讀 3097

有關時間複雜度的總結:

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...