回顧快速排序

2021-08-20 02:56:45 字數 2034 閱讀 1412

快速排序是經典的排序方式之一,在大學演算法課上是必學的內容。不過工作了這麼久,中間也沒有怎麼寫演算法,東西也忘得差不多了。最近找工作的時候居然被問到快排,有點兒懵了。所以再來回顧一下,自己寫乙個快排。

不說這麼多,直接上**:

public

class

qsort

private

static

void

quicksorthelper(t elements, int left, int right)

}private

static

intpartition(t elements, int left, int right)

}

方式1:

private

static

intpartition(t elements, int left, int right)

elements[left] = elements[right];

while (left < right && elements[left].compareto(pivot) <= 0)

elements[right] = elements[left];

}elements[left] = pivot;

return left;

}

方式2:

private

static

intpartition(t elements, int left, int right)

}swap(elements, left, i - 1);

return i - 1;

}

然後我使用了乙個方法簡單地作也對比:

listsample = new arraylist<>();

random random = new random();

for (int i = 0; i < 1000000; i++)

long start, end;

integer array = sample.toarray(new integer[0]);

start = system.nanotime();

arrays.sort(array); //使用tim sort

end = system.nanotime();

system.out.println("tim time used: " + (end - start) / 1000);

integer array3 = sample.toarray(new integer[0]);

start = system.nanotime();

qsort.sort2(array3); //使用方法2partition

end = system.nanotime();

system.out.println("p2 time used: " + (end - start) / 1000);

integer array2 = sample.toarray(new integer[0]);

start = system.nanotime();

qsort.sort(array2); //使用方法1partition

end = system.nanotime();

system.out.println("p1 time used: " + (end - start) / 1000);

發現以下的現象:

在資料已經是順序或逆序,並且資料量大(100w)的情況下,方法1和方法2都會有stackoverflowexception,這是因為遞迴呼叫的原因;

在資料量小(1000),並且資料被充分打亂的情況下,快排可以比tim sort更快;

在資料量大的時候, tim sort明顯快於快排。

通過查資料,可以知道快排的演算法複雜度平均為nlogn。並且在以下情況下演算法複雜度最高,為n^2:

順序;逆序;

所有元素都相等(1和2的特殊情況)。

桶排序 氣泡排序 選擇排序 快速排序回顧

第一次了解桶排序的時候,是在c語言課本的乙個題目。題目大概意思是要將三萬個學生的成績進行排名,分數從0分到100分。桶排序的時間複雜度時o m n 所以就可以申請乙個大小為100的為int型別的陣列,然後將陣列初始化為0,再將陣列的下標看作為分數,把陣列元素中儲存的數值對應著獲得該分數的人數,這樣分...

演算法快速回顧 排序演算法

常用排序演算法有以下幾種 氣泡排序 插入排序 快速排序 歸併排序 堆排序。本文將對五種常用演算法分析並實現。交換兩個元素的值 這裡列出幾種不同寫法 void swap int a,int b void swap int a,int b void swap int a,int b 氣泡排序 原理 比較...

HTML快速回顧

是用來描述網頁的語言 hyper text markup language 是標記語言不是程式語言,用一套標記標籤來描述網頁。開始標籤 html元素 結束標籤 htm html 到 h1是主標題 最重要的 瀏覽器會自動在段落前後新增空行,是塊級元素 鏈結可以是字 句子 影象。href規定鏈結的目標,...