写这个主要是为了在必要的时候能够根据当时的思路比较快的掌握快速排序算法的相关要点。
先设置一组要排序的数组arr[5]={47,34,54,24,76};
首先选定中轴数,为了方便即取第一个数47,在程序中用temp这样一个变量记录下来;
设定下标low和high分别指向数组的第一个和最后一个数据,此时arr[low]即为47,arr[high]为76;
在循环之前我们用l和r分别保存low和high的值;
第一次快排,r从右往左逐个寻找小于中轴的数。若r指向数据>=temp,则r--,向前递进一位;若r指向数字小于中轴数,则将arr[r]放到arr[l]的位置,再由l从左往右寻找大于中轴的数放到arr[r];同样,若l指向数据小于temp,则low++向后递推一位;
调用递归分别对中轴前后的数据进行再一次的快排,可以得到结果:
代码:(C++)
//快速排序:
void quickSort(double *arr,int low,int high){
if(low>=high)
return;
int l=low,r=high;//记录l和r下标
double temp=arr[low];//选定中轴数
while(l<r){
while(l<r&&arr[r]>=temp){
r--;
}
if(l<r){
arr[l]=arr[r];
}
while(l<r&&arr[l]<=temp){
l++;
}
if(l<r){
arr[r]=arr[l];
}
}
arr[l]=temp;
quickSort(arr,low,l-1);
quickSort(arr,r+1,high);
}