快速排序是經典的排序方式之一,在大學演算法課上是必學的內容。不過工作了這麼久,中間也沒有怎麼寫演算法,東西也忘得差不多了。最近找工作的時候居然被問到快排,有點兒懵了。所以再來回顧一下,自己寫乙個快排。
不說這麼多,直接上**:
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規定鏈結的目標,...