卻是五侯家未識,春風不放過江來。 —羅鄴《梅花》快速排序
在排序演算法中,快速排序是一種較快的排序演算法,其時間複雜度為o(n*logn)。
主要思想
快速排序的主要思想為:
快速排序又叫分治法,也就是分塊治理,把當前塊分成較大數塊、較小數塊之後,再把較大數塊,較小數塊看成乙個單獨的塊進行排序實現分治。
引用一張偷來的圖,非常形象,而且看了停不下來。
演算法實現
假設現在有一組資料int num = ;
現在要對其進行排序,且在排序時前面放較小數:
以此2、3步驟重複,下一步找到的較小數為num[7] =5,填到num[5] = 77 的坑,再找乙個比當前大的num[6] = 69,填入num[7] =5,此時,再走時,left = right,資料已經排好
num =;
可以看到,較大數塊全部在basic = 44 的右邊,較小數塊全在左邊
其後便是分治,將較大數塊、較小數塊看成乙個單獨塊遞迴再次排序。
**實現
在**中放了個static int times = 1;
記錄排序次數
/**
*@author jan
* 快速排序,找基準數,將小於和大於他的分別放到他兩邊,再將兩邊重複此步驟
*/public
class
quicksort ;
//有序檢測
//一次
// int num = ;
//4次
// int num = ;
sort(num,0,num.length-1);
for (int i = 0; i < num.length; i++)
}/**
排序方法
*/public
static
void
sort(int num,int le,int ri)
int left = le;
int right = ri;
/* 基準數 */
int basic = num[left];
/* 小的放左邊*/
while (left < right)
/* 找不到的話left>=right */
if (left < right)
/* 從前往後,找大於basic的數*/
while (left < right && num[left] < basic)
if (left < right)
}num[left] = basic;
sort(num,le,left-1);
sort(num,right+1,ri);}}
執行結果
quicksort12
3456
78910
111,3,5,5,7,22,44,69,77,78,
process finished with
exit code 0
總結
在排序中記得調整填坑之後的位置,即內縮:left->
MySQL 5 7主鍵查詢結果 真的很快嘛?
這篇部落格測試mysql5.7的主鍵查詢結果並確定mysql5.7是不是真的比之前的版本查詢的更快。前段時間mysql5.7剛剛發布,現在塵埃落定,是時候來 測試一下它在效能上面的提公升了。我可不是僅僅為了滿足自己的好奇心才做的這些測試!許多還在使用mysql5.6 甚至是mysql5.5 的使用者...
sqlite快速入門手冊 真的很簡單
它的特點是 極小 資料庫 效能不錯。適合場景 小型應用軟體,解決存檔案的不便 windows開發環境下可以選擇 sqlite shell win32 x86 3080500.zip 294.87 kib 具體編號3080500可能會不同 解壓後只有個sqlite3.exe,這就夠了。將它拷貝到第乙個...
java 快速排序
public class myquicksort while strvoid middle strvoid low lowif low hight else if hight middle temp strvoid hight strvoid hight strvoid low strvoid lo...