• QuickSort(快速排序)的JAVA实现


    QuickSort的JAVA实现

    这是一篇算法课程的复习笔记

    用JAVA对快排又实现了一遍。

    easy

    先实现的是那个easy版的,每次选的排序轴都是数组的最后一个:

    package com.algorithms.jiading.www;
    
    import java.io.*;
    import java.util.ArrayList;
    
    /*
    这是quicksort的java实现:version1,每次选择最后的元素为spilt的中心
     */
    public class quickSort {
        public void exchange(ArrayList<Integer> element, int firstIndex, int secondIndex){
            Integer temp = element.get(firstIndex);
            element.set(firstIndex,element.get(secondIndex));
            element.set(secondIndex,temp);
            return;
        }
        public int findCenter(ArrayList<Integer> element,int begin,int end){
            int i=begin-1;
            int endValue=element.get(end);
            for(int j=begin;j<end;j++){
                if(element.get(j)<endValue){
                    i++;
                    exchange(element,i,j);
                }
            }
            exchange(element,i+1,end);
            return i+1;
        }
        public void myQuicksort(ArrayList<Integer> element,int begin,int end){
            if(end-begin==1){
                if(element.get(end)<element.get(begin))
                    exchange(element,begin,end);
            }
            else if(begin<end){
                int center=findCenter(element,begin,end);
                myQuicksort(element,begin,center-1);
                myQuicksort(element,center+1,end);
            }
            return;
        }
        public static void main(String[] args) {
            ArrayList<Integer> element=new ArrayList<Integer>();
            try {
                //在project中,相对路径的根目录是project的根文件夹
                InputStream is=new FileInputStream("src/com/algorithms/jiading/www/number.properties");
                BufferedReader reader=new BufferedReader(new InputStreamReader(is));
                String tempString = reader.readLine();
                String[] split = tempString.split(",");
                for (String toInt:split
                     ) {
                    element.add(Integer.parseInt(toInt));
                }
                /*
                main方法里面调用非静态方法时,需要new一个对象,因为静态方法,静态类属于模板,非静态类和方法属于对象。
                 */
                quickSort qq=new quickSort();
                qq.myQuicksort(element,0,element.size()-1);
                for (Integer i:element
                     ) {
                    System.out.println(i);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    
    

    之后换成使用随机数获取排序轴的算法:

    advance

    修改的部分:

    public int findCenterOriginal(ArrayList<Integer> element,int begin,int end){
            int i=begin-1;
            int endValue=element.get(end);
            for(int j=begin;j<end;j++){
                if(element.get(j)<endValue){
                    i++;
                    exchange(element,i,j);
                }
            }
            exchange(element,i+1,end);
            return i+1;
        }
        public int findCenter(ArrayList<Integer>element,int begin,int end){
            //不用currentTimeMillis的原因是:当多线程调用时,由于CPU速率很快,因此currentTimeMillis很可能相等,使得随机数结果也会相等
            //nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位。此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。
            long seed=System.nanoTime();
            Random rd=new Random(seed);
            int point=(rd.nextInt(end)%(end-begin+1))+begin;
            exchange(element,point,end);
            return findCenterOriginal(element,begin,end);
        }
    
  • 相关阅读:
    水晶报表关于System.Web.Extensions报错的问题
    个人下一步学习计划
    一个老程序员对数据库的一点纠结
    Visual SourceSafe权限配置记录
    SQL SERVER 2008代码折叠小技巧
    用命令行自动备份数据库到其他服务器
    CrystalReports 2008序列号留档
    ····
    C语言中的static
    页面自动刷新的几种方法
  • 原文地址:https://www.cnblogs.com/jiading/p/11743051.html
Copyright © 2020-2023  润新知