java排序之快排

来源:互联网 发布:淘宝无线端装修工具 编辑:程序博客网 时间:2024/04/29 07:47
这篇文章来谈谈快排,最近有一种感觉,只要有规律可循的代码,分解成为两部分以后效率就会提高很多。代码思想如下
 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的,
          这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环,
          很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的

          ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。

代码:

package www.jk.qsort;import java.util.Arrays;/** *  * @author jk 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的, *         这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环, *         很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的 *         ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。 *  */public class test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint[] a = new int[] { 2, 1, 6, 7, 8, 5, 3, 5 };quickSort(a, 0, a.length - 1);System.out.println(Arrays.toString(a));}private static void quickSort(int[] a, int begin, int end) {//int tbegin = begin, tend = end;// 将第一个值作为快排序的分界值int pivot = a[begin];while (tbegin < tend) {// 如果两个游标没有交集,或者后面一直大于或等于分界值就一直向前移动while (tbegin < tend && a[tend] >= pivot) {--tend;}a[tbegin] = a[tend];// 如果两个游标没有交集,或者前面是小于或等于分界值,就一直向后头移动while (tbegin < tend && a[tbegin] <= pivot) {++tbegin;}a[tend] = a[tbegin];}// 将临界值赋值给游标的交集的地方a[tbegin] = pivot;if (begin < tend) {// 递归排序游标的左边quickSort(a, begin, tend - 1);}if (tbegin < end) {// 递归排序游标的右边quickSort(a, tbegin + 1, end);}}}


  

0 0
原创粉丝点击