用JAVA实现快速排序
Posted 富贵的神秘星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JAVA实现快速排序相关的知识,希望对你有一定的参考价值。
快速排序,是实战中一种快速的排序算法,比选择排序要快得多,而实现快速排序首先要做的是寻找一个基准值,之后将数据分为两部分,一部分小于基准值,一部分大于基准值。然后对这两部分数据进行快速排序,可以用递归实现,直到整体数据有序。
我将实现快速排序分为两个步骤,一个是取出每次递归排序的基准值的排序后位置下标,一个是分而治之的方法。如下图
Main方法调用方式
实例代码如下:
public static void main(String[] args) {
int[] ins = {22,-3,12,58,25,72,21,3,21,46,21,156};
new QuickSort().qucikSortTwo(ins, 0, ins.length-1);
System.out.println(Arrays.toString(ins));
}
/**
* 取出基准值应该在排序后哪个下标位置
* @param items 整个数组
* @param low 基准值下标
* @param high 整个数组最大下标值
* @return 所选基准值在排序后的哪个下标
* @author zhao.fg
*/
public int quickSortOne(int[] items,int low,int high){
int num = items[low]; //数组的第一个元素作为基准值
while(low < high){
while(low < high && items[high] >= num){
high--;
}
if(low < high){
items[low] = items[high]; //比基准值小的记录到低端
}
while(low < high && items[low] < num){
low++;
}
if(low < high){
items[high] = items[low]; //比基准值大的记录到高端
}
}
items[low] = num;
return low;
}
/**
* 递归的方式,实现分而治之的思路
* @param items 整个数组
* @param low 选定基准值的下标
* @param high 整个数组最大下标值
* @author zhao.fg
*/
public void qucikSortTwo(int[] items,int low,int high){
if(items.length > 0){
if(low < high){
int num = quickSortOne(items, low, high);//将数组一分为二
qucikSortTwo(items, low, num -1);//对基准值低端进行排序
qucikSortTwo(items, num +1, high);//对基准值高端进行排序
}
}
}
因为作者是一个比较笨的人,所以想着把一些自己感兴趣的东西,写下来。
因为作者也是一个初级的菜鸟,写的不对的地方欢迎指正。
有些事情无论结果如何,无论对错,也要去做,这样才不会后悔。
以上是关于用JAVA实现快速排序的主要内容,如果未能解决你的问题,请参考以下文章