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

    package com.dai.sort;
    
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    
    public class QuickSort {
    
        public static void main(String[] args) {
            /*int[] arr = {-9, 78, 0, 23, -567, 70};
            quickSort(arr, 0, arr.length-1);
            System.out.println(Arrays.toString(arr));
    */
            int[] arr = new int[800000]; 
            for(int i=0; i<800000; i++) {
                arr[i] = (int)(Math.random()*8000000);
            }
            Date date1 = new Date();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date1String = simpleDateFormat.format(date1);
            System.out.println("排序前的时间为:" + date1String);
            quickSort(arr,0,arr.length-1);
            Date date2 = new Date();
            String date2String = simpleDateFormat.format(date2);
            System.out.println("排序后的时间为:" + date2String);        
        }
        public static void quickSort(int[] arr, int left, int right) {
            int l = left; //左索引
            int r = right;//右索引
            //pivot 中轴
            int pivot = arr[(left+right)/2];
            //比pivot小的放左边,大的放右边
            int temp = 0;
            while(l<r) {
                while(arr[l] < pivot) {
                    l +=1;
                }
                while(arr[r]>pivot) {
                    r -= 1;
                }
                //如果l >= r,说明Pivot左边全小于=pivot, 右大于=pivot
                if (l>=r) {
                    break;
                }
                //交换
                temp = arr[l];
                arr[l] = arr[r];
                arr[r] = temp;
                
                //如果交换玩后,发现arr[l] = pivot,前移
                if(arr[l] == pivot) {
                    r -= 1;
                }
                //如果交换完后,arr[r]=pivot,则后移
                if(arr[r] == pivot) {
                    l += 1;
                }
            }
            //如果l==r,必须l++ r--, 否则出现栈溢出
            if(l == r) {
                l += 1;
                r -= 1;
            }
            //向左递归
            if(left<r) {
                quickSort(arr, left, r);
            }
            //向右递归
            if(right>l){
                quickSort(arr, l, right);
            }
        }
    
    }
  • 相关阅读:
    UIWebView 设置字体样式和行间距
    UIAlertView问题
    仿jquery的函数
    css 不换行,换行
    兼容火狐插入背景音乐
    防止屏蔽window.onload函数
    mysql
    解决手机浏览器上input 输入框导致页面放大的问题
    vue 中监听页面滚动
    WCF处理异常的方式
  • 原文地址:https://www.cnblogs.com/shengtudai/p/14396776.html
Copyright © 2011-2022 走看看