快速排序在最差排序速度,平均排序速度,上都十分優秀,通過簡單大數據數組測試,快速排序至少比冒泡排序(這一類複雜度爲log(n^2)的排序法)快5倍,廢話少說,直接上代碼上解釋 數組
如下是C++代碼,你們能夠直接拷貝測試一下 測試
//每一次完成一輪遍歷(即i=j時),就會產生一個位置(i或j),這個位置就是基數的正確位置,這時基數左邊是比它小的書,右邊是比它大的數,而後只須要對基數左邊的數和右邊的數分別遞歸調用快排就好了 大數據
void QuickSort(int*arr,int low,int high) ui
{ spa
int i,j;//遍歷數 排序
int temp;//基數 遞歸
i=low;//從low開始 原理
j=high;//到high 遍歷
temp=arr[low];//基數 數據
//若是i<j說明遍歷還未結束,還有位置沒有遍歷到,若是i=j表明只剩下一個位置,而這個位置就是基數的正確位置
while(i<j)
{ //開始排序
//從high開始找比基數小的數,替換本來基數的值,這時比基數小的數一個在i處,一個在j處
while (i<j&&arr[j]>=temp)j--;
if(i<j)
{
//若是temp(基數)>arr[j],將arr[j]這個數賦值給到基數arr[i]。
arr[i]=arr[j];
i++;
}//從i+1開始找比基數大的數,找到後(必定找獲得的)放到j處,這樣原來重複的數就被替代掉了,而最終重複的數將由基數替換
while(i<j&&arr[i]<temp)i++;
if(i<j)
{
arr[j]=arr[i];
j--;
}
//若是i<j說明還有沒遍歷到的位置,so go on
}
//此時i=j,該位置就是基數的正確存放位置
arr[i]=temp;
//開始子塊排序
if(low<i-1)
//對基數以前的位置進行快速排序,相同原理
QuickSort(arr,low,i-1);//從最低值到該基數以前
if (j+1<high)
//對基數以後的位置進行快速排序,相同原理
QuickSort(arr,j+1,high);//從基數以後到最高值
}
手打不易,塗色不易,給個讚唄~