zoukankan      html  css  js  c++  java
  • 算法:快速排序

    package com.hb.jzoffer;
    
    import java.util.Random;
    
    import offer.utilities.ArrayUtils;
    
    
    public class QuickSort {
        
        public QuickSort() {
            // TODO Auto-generated constructor stub
            
        }
        
        //快速排序 (两端交替着向中间扫描)
        
        private  static  int RandomInRange(int  min , int max){
            if(min < max){
    //            Random   random = new Random();
    //            int s  = random.nextInt(max)%(max - min + 1) + min ;
                int s = (int)( Math.random() * (max - min) + min );
                return  s ;            
            }else
                return -1 ;        
        }
        
        
        
        public  int  Partition(int[] data , int  start , int  end){
            int  length = data.length;
            if(data == null || start < 0  || end >= length){
                return -1;            
            }
            //随机产生一个index,将此index里面的数值和最后的数值对换
            int  index = RandomInRange(start , end );        
            if(index != -1){
                ArrayUtils.exchangeElements(data, index, end);
                int  small = start - 1 ;
                for(index = start ; index < end ; ++index){
                    if(data[index] < data[end]){
                        ++ small;
                        if(small != index){
                            ArrayUtils.exchangeElements(data, index, small);
                        }
                    }
                }
                ++small;
                ArrayUtils.exchangeElements(data, small, end);
                return small;            
            }else{
                return -1;
            }
            
        }
        
        public void  QuickSort(int[] data , int length , int start , int end){
            if(start == end ){
                return ;
            }
            int  index = Partition(data, start, end);
            if(index > start){
                QuickSort(data, length, start, index -1) ;
            }
            if(index < end ){
                QuickSort(data, length, index + 1, end);
            }
        }
        
        public static void main(String[] args) {
            QuickSort  quickSort = new QuickSort() ;
            
            int[] data = { 3, 6, 1  ,2, 4 , 5};
            
            int length = data.length;
            int start = 0 ;
            int end = length - 1 ;
            
            quickSort.QuickSort(data, length, start, end);
            
            ArrayUtils.printArray(data);
            
            
        }
        
    }
  • 相关阅读:
    实验2四则运算结对
    作业5 四则运算 测试与封装 5.1
    0909我对编译的看法
    P2602 [ZJOI2010]数字计数(递推+数位dp写法)
    模数的世界[数论]
    P2312[秦九韶+读入取模+哈希解方程]
    第三章 Python 的容器: 列表、元组、字典与集合
    第二章 Python 基本元素:数字、字符串、变量
    第一章 Python 之初探
    第四章 Python 外壳 :代码结构
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4360928.html
Copyright © 2011-2022 走看看