设为首页 加入收藏

TOP

java之快速排序
2019-05-11 02:27:52 】 浏览:57
Tags:java 快速 排序

快速排序,顾名思义,是一种速度快,效率高的排序算法。
快排原理:
在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。
整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。
一趟排序的方法:
1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标
2,从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;
3,从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;
4,交换Ai 和Aj
5,重复这个过程,直到 i=j
6,调整key的位置,把A[i] 和key交换
假设要排的数组为:A[8] ={ 5 2 8 9 2 3 4 9 }
选择 key = 5, 开始时 i=0,j=7
index 0 1 2 3 4 5 6 7

开始: 52 8 9 2 3 49
i j
第一次找 52892349
i j
交换:52492389
i j
第二次找 5 2 4 92 38 9
i j
交换: 52432989
i j
第三次找 5 2 4 3 298 9
ij
调整key:25 4 3 59 8 9
ij


以下为代码:
[java] view plain copy
<codeclass="language-java">packagecom.quicksort;

importjava.util.Arrays;

publicclassQuickSort{
publicstaticvoidmain(String[]args){
int[]a={1,2,4,5,7,4,5,3,9,0};
System.out.println(Arrays.toString(a));
quickSort(a);
System.out.println(Arrays.toString(a));
}

publicstaticvoidquickSort(int[]a){
if(a.length>0){
quickSort(a,0,a.length-1);
}
}

privatestaticvoidquickSort(int[]a,intlow,inthigh){
//1,找到递归算法的出口
if(low>high){
return;
}
//2,存
inti=low;
intj=high;
//3,key
intkey=a[low];
//4,完成一趟排序
while(i<j){
//4.1,从右往左找到第一个小于key的数
while(i<j&&a[j]>key){
j--;
}
//4.2从左往右找到第一个大于key的数
while(i<j&&a[i]<=key){
i++;
}
//4.3交换
if(i<j){
intp=a[i];
a[i]=a[j];
a[j]=p;
}
}
//4.4,调整key的位置
intp=a[i];
a[i]=a[low];
a[low]=p;
//5,对key左边的数快排
quickSort(a,low,i-1);
//6,对key右边的数快排
quickSort(a,i+1,high);
}
}



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java NIO(一) 下一篇[Spark优化]--spark-1.6.0调优指南

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目