说到排序算法,就不得不说优雅而简练的一种算法——快速排序算法。
快速排序是目前使用率最多,效率最高,速度最快的一种排序算法。
作为排序算法界的扛把子,快速排序算法无疑是程序员首选的一种排序算法。
首先选择一个数据作为基准,然后再让基准数和其他数据进行对比。
先让基准数从数组的右边依次遍历,直到找到小于基准数数值的数,并将该数与基准数相互交换位置
再让基准数从数组的左边依次遍历,直到找到大于基准数数值的数,并将该数与基准数相互交换位置
循环以上步骤,当以上的步骤执行完毕之后,就确定的基准数的位置。
然后将数组以基准值为基准划分为左右两个区域
基准值左边的区域中的数值比基准值小,基准值右边的区域中的数值比基准值大。
然后将左区和右区以同样的方式进行判断和换位。
好了,废话不多说,下面来看一下实现代码。
//传入数组和索引,lo = [0] ,hi = [array.length() - 1]
public static int fastSort(int[] array,int lo,int hi){
//定义当前基准值,为当前基准值赋值为当前数组的第一个值
int key = array[lo];
//判断 如果数组中不是只有一个数据,则需要进行排序
while( lo < hi){
//判断如果最后的数据大于或者等于基准值则将最大索引依次递减,直到找到比基准值小的数
while(lo < hi && array[hi] >= key){
//从右至左依次遍历
hi--;
}
//如果找到符合条件的数值,则将基准值和当前值相互换位
array[lo] = array[hi];
//判断如果第一个数据小于或等于基准值则将最小索引依次递 增,直到找到比基准值大的数
while(lo < hi && array[lo] <= key){
//从左至右依次遍历
lo++;
}
//如果找到符合条件的数值,则将基准值和当前值相互换位
array[hi] = array[lo];
}
//将基准值记录到尾
array[hi] = key;
//返回基准值索引
return hi;
}
public static void sort(int[] array,int lo,int hi){
if(lo >= hi){
return;
}
//调用方法,接收基准值
int index = fastSort(array,lo,hi);
//左区递归调用
sort(array,lo,index-1);
//右区递归调用
sort(array,index+1,hi);
}
推荐排序后使用的 - 二分查找法
以上是笔者对于快速排序的理解
如有不妥之处,请各位大佬指出
谢谢
{\__/} {\__/}
( ·-·) (·-· )
/ >------------------------------------------------< \
| ☆ |
| ☆ |
| ★ |
| ☆ |
| ☆ |
| |
-------------------------------------