桶排序占用空間太大?快速排序太慢?有沒有更好的排序算法呢?答案肯定是有的。
它就是快速排序。
快速排序的基本思想是:通過一趟排序將要排序的數(shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序。
快速排序典型的用到了分治算法,至于分治算法是什么以后再為大家來介紹。
學懂快速排序只需要三步:
先從數(shù)列中取出一個數(shù)作為基準數(shù);
分區(qū)過程,將比這個數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊;
再對左右區(qū)間重復第二步,直到各區(qū)間只有一個數(shù);
我們來規(guī)定一下基準數(shù),在這里我們把待排序數(shù)列的第一個數(shù)字當做基準數(shù)。
我們可以寫一個雙指針掃描。左指針找大于基準數(shù)的數(shù)字,右指針找小于基準數(shù)的數(shù)字,如果右指針指向元素的下標大于左指針指向元素的小標,那么就交換元素。再把基準數(shù)交換到分界處,然后把這段數(shù)分成兩段,一段是[頭,基準數(shù)],另一段是[基準數(shù)+1,尾]。
可以上代碼了