快速排序-递归实现
Posted 成长的足记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序-递归实现相关的知识,希望对你有一定的参考价值。
快速排序算法--递归实现
排序算法比较于其他的排序算法 速度上更快 排序效率更高。。。也是我觉得逻辑比较复杂的一个算法。。经过几个片段晚上的学习,终于明白了其中的原理并代码实现了。在这里分享给大家~~~
原理:一待排序的数组,我们先找到基准点(关注点) 一般设置为数组第一个元素 其实任何一个都可以。然后接下来就是排序了定义两个循环 一个 i 循环从左往右, 一个 j 循环从右往左,i 循环如果比基准点数小,就不断往右走。一旦碰到比基准点大的数就将此值抛给 j 循环此时停留的位置,j 循环如果比基准点数大,就不断往左走,一旦碰到比基准点小的数就将此值抛给 i 循环所停留的位置。那么,就存在一个美好的时刻 i 和 j 碰到一起了 那么此时的就需要将基准点值赋值给该位置的值,这样的话 在基准点左边的所有element就全部比基准点数小(但不一定是有序的),同理,在基准点右边的所有element就全部比基准点大,那么,就完成了一次循环。。。剩下的就是重复上述过程,那么就可以用递归。针对左边的全部element 开始位置就是start(此时是0) 那么结束位置为基准点位置-1,右边部分开始位置基准点位置+1,结束位置end(此时是arr.length-1) 然后第二次结束 最后在细分(类似二分查找) 往返。。。最终待排序序列全部排序完毕!
代码示例
注:仅供参考,如有更优方式,可以留言
package cn.test;
class Main{
public static void main(String[] args) {
int[] arr = {2,45,6,5,2,67,4};
QuickSort(arr,0,arr.length-1);
for(int i=0;i<arr.length;i++){
if(arr[i] == arr[arr.length-1]){
System.out.println(arr[i]);
}else{
System.out.print(arr[i]+" ");
}
}
}
public static void QuickSort(int[] arr,int start,int end){
if(start<end){
int index = GetIndex(arr,start,end);
QuickSort(arr, start, index-1);
QuickSort(arr, index+1, end);
}
}
public static int GetIndex(int[] arr, int start, int end) {
int i= start;
int j= end;
int index = arr[start];
while(i<j){
while(i<j){
if(arr[j]<index){//j往左走
arr[i] = arr[j];
break;
}
j--;
}
while(i<j){
if(arr[i]>index){//i往右走
arr[j] = arr[i];
break;
}
i++;
}
}
arr[i] = index;
return i;
}
}
以上是关于快速排序-递归实现的主要内容,如果未能解决你的问题,请参考以下文章