快速排序在最差排序速度,平均排序速度,上都十分优秀,通过简单大数据数组测试,快速排序至少比冒泡排序(这一类复杂度为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);//从基数以后到最高值
}
手打不易,涂色不易,给个赞呗~