• 排序_快速排序


    快速排序利用划分技术和划分递归。
    主要是定义划分点
    递归的退出是划分的当前数据只有一个

    public class ArrayIns {
        private long [] a;
        private int nElems;
        public ArrayIns(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 void quickSort() {
            recQuickSort(0, nElems-1);
        }
        //递归方法
        public void recQuickSort(int left,int right) {
            if(right-left<=0) {
                return;//当需要划分的当前数组的数据为1,就不用划分了
            }else{
                long pivot=a[right];//划分点(就是当前数组的最后一个值)
                int partition=partitionIt(left, right, pivot);  //由划分方法return得到
                recQuickSort(left, partition-1);//前部分再划分
                recQuickSort(partition, right);//后部分再划分
            }
        }
        public int partitionIt(int left,int right,long pivot) {
            int leftPtr=left-1;
            int rightPtr=right;
            while(true) {
                //左边找大于特定值的
                while(a[++leftPtr]<pivot);
                //右边找小于特定值的
                while(rightPtr>0 && a[--rightPtr]>pivot);
                if(leftPtr>=rightPtr) break;
                else
                    //交换指向的值
                    swap(leftPtr, rightPtr);
            }
            swap(leftPtr, right);
            return leftPtr;
            
        }
        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;
            ArrayIns arrayPar=new ArrayIns(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.quickSort();
            arrayPar.display();
    
        }
    
    }
  • 相关阅读:
    java连接oracle
    用js实现登录的简单验证
    合并链表,按主键升序
    Jquery中.ajax和.post详解
    简洁的Jquery弹出窗插件
    服务端缓存页面及IIS缓存设置
    C#托管代码、非托管代码及回收机制
    页面滑动底部自动加载下一页信息
    EF各版本增删查改及执行Sql语句
    Node.Js and Mongoose
  • 原文地址:https://www.cnblogs.com/S-Mustard/p/8097463.html
Copyright © 2020-2023  润新知