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);
            }
        }
    
    }
  • 相关阅读:
    006_linux驱动之_ioremap函数使用
    004_linux驱动之_class_create创建一个设备类
    003_linux驱动之_file_operations函数
    002_linux驱动之_register_chrdev注册字符设备
    001_linux驱动之_驱动的加载和卸载
    007_linuxC++之_构造函数的初级应用
    006_linuxC++之_引用
    005_linuxC++之_指针的引入
    004_linuxC++之_函数的重载
    003_linuxC++之_namespace使用
  • 原文地址:https://www.cnblogs.com/shengtudai/p/14396776.html
Copyright © 2011-2022 走看看