所謂快速排序算法是基於交換排序和遞歸思想的,它的速度的確如名字所示——快!而且這種一算通常被用做數量級比較大的數據當中,在大數據中有着很重要的地位。算法
下面是快速排序算法的流程:
一、首先設定一個分界值(通常都是取中間或者第一個數),經過該分界值將數組分紅左右兩部分; 二、將數組中大於等於分界值的數值放在分界值的右邊,將數組中小於等於分界值的數值放在分界值的左邊;
三、而後左右兩邊的數組又能夠按照這個方式進行獨立排序;
四、重複這個過程,能夠看出這是一種遞歸的思想,當遞歸到最後,整個數組也就排序完成;數組
下面經過一個例子來說解一下:對數組int[] arr = {34,25,65,33,16,78,43,22}進行快速排序大數據
{22,25,65,33,16,78,43,34}ui
語言組織能力有限,直接上代碼:code
/** * 排序算法之快速排序 * 參數arr爲須要排序的數組 * 參數left爲數組的起始下角標即0 * 參數right爲數組的最後下角標即arr.length-1 */ private void quickSort(int[] arr,int left,int right) { int f,t; int rtemp,ltemp; ltemp = left; rtemp = right; f = arr[(left+right)/2]; //通過一輪排序,已經將數組分爲左右兩部分 while(ltemp<rtemp) { while(arr[ltemp]<f) { ++ltemp; } while(arr[rtemp]>f) { --rtemp; } if(ltemp<=rtemp) { t = arr[ltemp]; arr[ltemp] = arr[rtemp]; arr[rtemp] = t; --rtemp; ++ltemp; } } if(ltemp == rtemp) { ltemp++; } //進行遞歸排序 if(left<rtemp) { quickSort(arr,left,ltemp-1); } if(ltemp<right) { quickSort(arr,rtemp+1,right); } }
快速排序的精髓在於分治思想,分而治之,它的時間複雜度爲O(nlog2n)。排序