码迷,mamicode.com
首页 > 编程语言 > 详细

关于快速排序中的疑惑

时间:2015-11-08 22:25:25      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

 

以上的就是思想,在看了这个视频:http://www.iqiyi.com/v_19rrhzyeqs.html,我学着写了一段脚本,脚本如下

public class QuickSort {
    public static void main(String[] args){
       int[] a={12,22,11,3,13,45,6,33,22,5,6,2,1,12};
        show(a);
        sort(a, 0, a.length - 1);
        show(a);
    }

    public static void show(int a[]){
        for(int i=0;i<a.length;i++)
            System.out.print(a[i] + "  ");
        System.out.println();
    }

    public static void sort(int[] a, int begin, int end){
        if(end-begin<=1)
            return;

        int key=a[begin];//基准
        int p1=begin;
        int p2=end;
        boolean bool=true;//默认为true的时候从右向左比较


L1:     while (p1<p2){
            if(bool){
                for(int i=p2;i>p1;i--){
                    if(a[i]<=key){
                        a[p1]=a[i];
                        p1++;
                        p2=i;
                        bool=false;
                        continue L1;
                    }
                }
                p2=p1;

            }else {
                for(int i=p1;i<p2;i++){
                    if(a[i]>=key){
                        a[p2]=a[i];
                        p2--;
                        p1=i;
                        bool=true;
                        continue L1;
                    }
                }
                p1=p2;
            }
        }
        a[p1]=key;
        sort(a, begin, p1 - 1);
        sort(a, p1 + 1, end);
    }
}

 

 但是执行的结果为

12  22  11  3  13  45  6  33  22  5  6  2  1  12  
1  2  3  5  6  6  11  12  12  22  13  22  45  33  

 奇怪的是,思路是没有错误的,但是为什么结果却是不对,还在研究中

关于快速排序中的疑惑

标签:

原文地址:http://www.cnblogs.com/xxyBlogs/p/4948340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!