用JAVA实现快速排序

Posted 富贵的神秘星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JAVA实现快速排序相关的知识,希望对你有一定的参考价值。

  快速排序,是实战中一种快速的排序算法,比选择排序要快得多,而实现快速排序首先要做的是寻找一个基准值,之后将数据分为两部分,一部分小于基准值,一部分大于基准值。然后对这两部分数据进行快速排序,可以用递归实现,直到整体数据有序。

  我将实现快速排序分为两个步骤,一个是取出每次递归排序的基准值的排序后位置下标,一个是分而治之的方法。如下图

    

用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实现快速排序的主要内容,如果未能解决你的问题,请参考以下文章

java算法面试题:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。选择冒泡快速集合至少4种方法排序

java 快速排序 ,用nio里的IntBuffer实现,

Java实现单链表的快速排序和归并排序

Java实现快速排序

Java实现快速排序

Java快速排序的非递归实现