zoukankan      html  css  js  c++  java
  • 排序_快速排序

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

    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();
    
        }
    
    }
  • 相关阅读:
    RQNOJ 342 最不听话的机器人:网格dp
    RQNOJ 329 刘翔!加油!:01背包
    RQNOJ 57 找啊找啊找GF:01背包
    RQNOJ 202 奥运火炬登珠峰:01背包
    RQNOJ 201 奥运大包围:LIS + 拼链成环
    2017SN多校D1T2 note:dp
    2017SN多校D1T1 loveletter:模拟
    HDU 2157 How many ways??:矩阵快速幂【i到j共经过k个节点的方法数】
    poj 3764 The xor-longest Path
    bzoj 1192 鬼谷子的钱袋
  • 原文地址:https://www.cnblogs.com/S-Mustard/p/8097463.html
Copyright © 2011-2022 走看看