zoukankan      html  css  js  c++  java
  • 划分_快速排序的前提技术

    以定义的某个值为划分点,将小于它的都放在一边,大于它的放在另一边,并不是排序。
    在划分的过程中有两个标记,他们分别从左边,右边开始寻找高于划分点的值,低于划分点的值。

    public class ArrayPar {
        private long [] a;
        private int nElems;
        public ArrayPar(int maxSize) {
            a=new long[maxSize];
            nElems=0;
        }
        public void insert(long value) {
            a[nElems]=value;
            nElems++;
        }
        public int size() {
            return nElems;
        }
        public void display() {
            for(int j=0;j<nElems;j++) {
                System.out.print(a[j]+" ");
            }
            System.out.println();
        }
        public int partitionIt(int left,int right,long pivot) {
            int leftPtr=left-1;//为什么要-1
            int rightPtr=right+1;//为什么要+1
            //初始值不是left,right的原因是经过循环之后他们的值会发生改变++leftPtr,--rightPtr,swap()就是改变之后的值
            //如果swap(0,10),本来的意图,在错误的情况下,最终swap(1,9),在正确的初始值情况下就是swap(0,10)
            while(true) {
                //左边找大于特定值的
                while(leftPtr<right && a[++leftPtr]<pivot);
                //右边找小于特定值的
                while(rightPtr>left && a[--rightPtr]>pivot);
                if(leftPtr>=rightPtr)
                    break;
                else
                    //交换指向的值
                    swap(leftPtr, rightPtr);
            }
            return leftPtr;
            
            /*
             * 可以这样写(但是按上面写的思路就更清晰一些)
             * 
             * int leftPtr=left;
              int rightPtr=right;
            while(true) {
                //左边找大于特定值的
                while(leftPtr<right && a[leftPtr++]<pivot);
                //右边找小于特定值的
                while(rightPtr>left && a[rightPtr--]>pivot);
                if(leftPtr>=rightPtr+2)
                    break;
                else
                    //交换指向的值
                    swap(leftPtr-1, rightPtr+1);
            }
            return leftPtr-1;
             * 
             * 
             */
            
        }
        public void swap(int dex1,int dex2) {
            long temp;
            temp=a[dex1];
            a[dex1]=a[dex2];
            a[dex2]=temp;
        }
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    }
    public class Test {
    
        public static void main(String[] args) {
            int maxSize=100;
            ArrayPar arrayPar=new ArrayPar(maxSize);
            arrayPar.insert(60);
            arrayPar.insert(30);
            
            arrayPar.insert(80);
            arrayPar.insert(10);
            arrayPar.insert(70);
            arrayPar.insert(90);
            arrayPar.insert(00);
            arrayPar.insert(20);
            arrayPar.insert(40);
            arrayPar.display();
            arrayPar.partitionIt(0, arrayPar.size()-1, 50);
            arrayPar.display();
    
        }
    
    }
























    }

     

  • 相关阅读:
    结对-五子棋游戏-开发过程
    团队-象棋游戏-设计文档
    课后作业-阅读任务-阅读提问-4
    团队-及格成绩查询系统-项目总结
    11.29-构建之法:现代软件工程-阅读笔记
    软件工程课程总结
    团队-及格成绩查询系统-最终程序
    团队-象棋游戏-团队一阶段互评
    课后作业-阅读任务-阅读提问-3
    课后作业-阅读任务-阅读笔记-3
  • 原文地址:https://www.cnblogs.com/S-Mustard/p/8097459.html
Copyright © 2011-2022 走看看