快速排序
2016-03-01 22:04
225 查看
/**
* 快速排序
* @author qian
*基于划分的方法
*划分的思想是:以priot为枢纽,将待排序的数组划分为两组,左边的一组元素小于枢纽,右边的一组元素大于枢纽
*划分的做法为:左边扫描到比枢纽大的就停下来,右边扫描到比枢纽小的也停下来(一般选择数组最右边的元素为枢纽),然后交换位置,直到左边指针与右边指针重合
*快速排序就是先把数组划分,再对左右两边的数组递归调用自身
*/
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {23,89,5,7,12,20,50,33,48,56};
quickSort(array,0,9);
System.out.println("排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
public static void quickSort(int[] a,int left,int right){
if(right-left<=0)
return ;
else{
int priot = a[right];
int partition = partitionSort(a,left,right,priot);
quickSort(a,left,partition-1);
quickSort(a,partition+1,right);
}
}
public static int partitionSort(int[] a,int left,int right,int priot){
int leftPos = left - 1;
int rightPos = right +1;
while(true){
while(leftPos<right&&a[++leftPos]<priot);
while(rightPos>left&&a[--rightPos]>priot);
if(leftPos>=rightPos)
break;
else
swap(a,leftPos,rightPos);
}
swap(a,leftPos,right);
return leftPos;
}
private static void swap(int[] a, int leftPos, int rightPos) {
int temp = a[leftPos];
a[leftPos] = a[rightPos];
a[rightPos] = temp;
}
}
* 快速排序
* @author qian
*基于划分的方法
*划分的思想是:以priot为枢纽,将待排序的数组划分为两组,左边的一组元素小于枢纽,右边的一组元素大于枢纽
*划分的做法为:左边扫描到比枢纽大的就停下来,右边扫描到比枢纽小的也停下来(一般选择数组最右边的元素为枢纽),然后交换位置,直到左边指针与右边指针重合
*快速排序就是先把数组划分,再对左右两边的数组递归调用自身
*/
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {23,89,5,7,12,20,50,33,48,56};
quickSort(array,0,9);
System.out.println("排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
public static void quickSort(int[] a,int left,int right){
if(right-left<=0)
return ;
else{
int priot = a[right];
int partition = partitionSort(a,left,right,priot);
quickSort(a,left,partition-1);
quickSort(a,partition+1,right);
}
}
public static int partitionSort(int[] a,int left,int right,int priot){
int leftPos = left - 1;
int rightPos = right +1;
while(true){
while(leftPos<right&&a[++leftPos]<priot);
while(rightPos>left&&a[--rightPos]>priot);
if(leftPos>=rightPos)
break;
else
swap(a,leftPos,rightPos);
}
swap(a,leftPos,right);
return leftPos;
}
private static void swap(int[] a, int leftPos, int rightPos) {
int temp = a[leftPos];
a[leftPos] = a[rightPos];
a[rightPos] = temp;
}
}
相关文章推荐
- Axis2+Spring构建WebService
- Axis2+Spring构建WebService
- poj Cow Sorting 3270 (置换群)好题
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- 核电站
- QT与泰剧
- Gradle之dependencies
- PAT-A1036 Boys vs Girls(25) (模拟)
- MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码
- Poj 2388 Who's in the Middle【排序】
- 兔子繁殖问题即斐波那契数列的java实现
- Java 虚拟机与 Dalvik 虚拟机的区别
- 染色大战
- PAT-A1006 Sign In and Sign Out(25)(模拟)
- sql语句中in后面的数据过多报错,或效率低
- unity-场景重置,游戏对象的初始化改变以及复制
- String类为什么被定义为final类型
- Java中@Override的作用
- 在CSDN查阅资料呢么久了,感觉还是自己开一个博客吧!
- CSS3弹性布局内容对齐(justify-content)属性使用详解