相關使用的工具類與介面
執行效率
實現**/**
* 這是乙個快速排序
* 陣列長度[2000] 值範圍[1-2000] 消耗的時間為[1]毫秒
* 陣列長度[4000] 值範圍[1-4000] 消耗的時間為[1]毫秒
* 陣列長度[8000] 值範圍[1-8000] 消耗的時間為[1]毫秒
* 陣列長度[16000] 值範圍[1-16000] 消耗的時間為[1]毫秒
* 陣列長度[32000] 值範圍[1-32000] 消耗的時間為[1]毫秒
* 陣列長度[64000] 值範圍[1-64000] 消耗的時間為[3]毫秒
* 陣列長度[128000] 值範圍[1-128000] 消耗的時間為[6]毫秒
* 陣列長度[256000] 值範圍[1-256000] 消耗的時間為[16]毫秒
* 陣列長度[512000] 值範圍[1-512000] 消耗的時間為[35]毫秒
* 陣列長度[1024000] 值範圍[1-1024000] 消耗的時間為[71]毫秒
* 陣列長度[2048000] 值範圍[1-2048000] 消耗的時間為[153]毫秒
* 陣列長度[4096000] 值範圍[1-4096000] 消耗的時間為[325]毫秒
* 陣列長度[8192000] 值範圍[1-8192000] 消耗的時間為[675]毫秒
* 陣列長度[16384000] 值範圍[1-16384000] 消耗的時間為[1397]毫秒
* 陣列長度[32768000] 值範圍[1-32768000] 消耗的時間為[2890]毫秒
* 陣列長度[65536000] 值範圍[1-65536000] 消耗的時間為[6031]毫秒
* 陣列長度[131072000] 值範圍[1-131072000] 消耗的時間為[12727]毫秒
* 陣列長度[262144000] 值範圍[1-262144000] 消耗的時間為[25993]毫秒
* * process finished with exit code 0
*/@test
public
void
quicksorttest()
public
static
final random random =
newrandom()
;@override
public string getsortname()
@override
public
int[
]arraysortmethod
(int
ints)
/** * 最初的快排演算法邏輯
** @param ints 整個陣列
* @param l 當前最小索引
* @param r 當前最大索引
*/private
intquicksort
(int
ints,
int l,
int r)
}//到這裡j記錄的就是比v小一邊的最大索引
//以上迴圈完成後就可以確定l索引在ints陣列中排序的位置
sorthelper.
swap
(ints, j, l)
;//返回l在ints中排好序確定的索引位置 並以j分割繼續遞迴排序
return j;
}/**
* 最初的快排演算法邏輯
** @param ints
* @param l
* @param r
*/public
void
sort
(int
ints,
int l,
int r)
//在資料量較小的時候使用插入排序
//這是因為經過了r-l>15的快速排序後 小一邊和大一邊的模糊排序後
//在r-l<=15 的時候之間的最大差已經很小了
//在最大差越小的情況下順序可能是越有序的
//說不定已經近乎有序的了 優化的快速排序對近乎有序的排序效率非常高
//優化後的插入排序對近乎有序的陣列進行效率相對較高
//插入排序相對歸併排序減少了陣列交換的過程
if(r - l <=15)
//個人理解快排核心
//每次遍歷排序對l-r之間的陣列進行區分
//好處1.每次遍歷可以定位乙個p索引在ints陣列中確定的位置
//好處2.因為每次排序都對l-r之間的資料進行大小劃分做了一次模糊的排序
//保證下次排序l-r排序之間最大差越來越小
//所以下次遍歷都比上次排序更加有序效率相對更快
int p =
quicksort
(ints, l, r)
;//以p中心點-1和+1為界限繼續遞迴快速排序
sort
(ints, l, p -1)
;sort
(ints, p +
1, r)
;}
快速排序詳細講解
五種常見排序就是 冒泡 插入 選擇 快速排序 歸併排序 排序和查詢的關係 排序是查詢的前提 排序是重點 在這裡,快速排序,顧名思義,排序速度較快,但是較為複雜,但是遞迴這個思想,說簡單但是也有些繞,說難也就幾行 的問題。先確定無序陣列裡的某乙個元素在有序裡的位置,這樣就把陣列分成兩半無序陣列 每一半...
golang 版快速排序
快速排序作為經典演算法,基本面試中都會遇到,今天記錄一下。1.非遞迴版,這裡也是使用乙個棧的模型 自己實現 來實現。需要注意的是inte ce轉int需要斷言。package main import container list fmt stack is stack type stack struc...
基礎排序 快速排序
快速排序 和歸併排序一樣,用了分治的思想,不過分的有些不同,歸併排序是先把陣列分的很小很小在進行簡單的操作從而達到目的,也就是先分在排序,但是快速排序是先排序再分,我覺得快速排序把數字轉來轉去,其意思就是找到這個數在這個陣列的位置,而且找到就不會變,有些像選擇排序的意思,但是快速排序在比較的過程中沒...