黑马程序员技术交流社区

标题: 快速排序法.,问题挺多的,麻烦高手指点一下。小妹谢了! [打印本页]

作者: Mr.Whatever    时间: 2012-5-8 12:04
标题: 快速排序法.,问题挺多的,麻烦高手指点一下。小妹谢了!
package com.ceshi.aa;
//目前无法运行,求指教
public class QuickSort {

        /**
         * 快速排序法
         * @param args
         *
         */
        /*        1.将一组数组传入方法,设left=起始0;right=末尾,a.length-1;
         *         2.if(left<right)向下执行
         *         3.一般设第一个数为枢轴值k
         *        4. 设置循环:while(a[right]>=k)right--;
         *         5.跳出循环后使用swap(数组,right,left)互换值;
         *         6.7:同4、5:while(a[left]<=k)left++;退出循环值互换;
         *         8.return left;
         * */
        public static int QuickSort(int[] a,int left,int right){
                int key=a[0];
                while(a[right]>=key)right--;
                int temp=a[right];
                a[right]=a[left];
                a[left]=temp;
                while(a[left]<=key)left++;
                temp=a[right];
                a[right]=a[left];
                a[left]=temp;
                return left;
        }
        /**
         * 递归控制快速排序
         * int point:枢轴值
         * 通过枢轴值往下带入,递归排列出有问题的数组,
         */
        public static void Quick(int[] a,int left,int right){
                if(left<right){
                        int point;
                        point=QuickSort(a,left,right);
                        
                        Quick(a,left,point-1);
                        Quick(a,point+1,right);
                }
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int pass[]={0,3,4,6,8,1,2,1,5,6,7,889,3,6,6};
               
                Quick(pass,0,pass.length);
                for (int i = 0; i < pass.length; i++) {
                        System.out.println(pass);
                }
        }
}

作者: Mr.Whatever    时间: 2012-5-8 20:57
黑马的高手呢?
作者: 黑马罗坚    时间: 2012-5-8 21:03
  public static int QuickSort(int[] a,int left,int right){
                int key=a[0];
                while(a[right]>=key&&right!=0)right--;
                int temp=a[right];
                a[right]=a[left];
                a[left]=temp;
                while(a[left]<=key&&left!=a.length-1)left++;




  int pass[]={0,3,4,6,8,1};
               
                Quick(pass,0,pass.length-1);
                System.out.println(Arrays.toString(pass));


虽然不报错了 但没实现排序  而且数组一大 容易造成递归过多栈内存溢出  而且这算法应该还没冒泡快把~!  想要加快排序速度 一轮循环交换一次数据就可以了

作者: Mr.Whatever    时间: 2012-5-14 00:43
谢谢2楼师兄




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2