美文网首页
手写一个快排(Java版)

手写一个快排(Java版)

作者: i_cyy | 来源:发表于2018-10-24 10:44 被阅读81次
      /**
     * @Author: Crystal
     * @Date: 2018/10/24 9:43
     **/
    public class QuikSort {
    
        public static void quickSort(int a[], int start, int end) {
            if (start >= 0 && end <= a.length - 1 && start < end) {
                int low = start;
                int hign = end;
                //记录一个关键值 spiltKey
                int spiltKey = a[start];
    
                //遍历数组
                while (start < end) {
                    //从后向前比较,直到遇到比spiltKey小的数
                    while (start < end && a[end] >= spiltKey) end--;
                    //交换位置
                    a[start] = a[end];
                    //从前向后比较,直到遇到有比spiltKey大的数
                    while (start < end && a[start] <= spiltKey) start++;
                    //交换位置
                    a[end] = a[start];
                }
    
                /**
                 * 此时第一次循环比较结束,关键值的位置已经确定了。
                 * 左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
                 */
                a[end] = spiltKey;
                //递归,再对左半部分排序
                quickSort(a, low, start - 1);
                //递归,再对右半部分排序
                quickSort(a, start + 1, hign);
            }
        }
    
        public static void main(String[] args) {
            int[] a = {1, 9, 6, 7, 2, 3, 8, 5};
            quickSort(a);
        }
    
        public static void quickSort(int[] a) {
            long t1 = System.nanoTime();
    //        System.out.println("##开始时间: " + t1);
            quickSort(a, 0, a.length - 1);
            long t2 = System.nanoTime();
    //        System.out.println("##结束时间" + t2);
            System.out.println("##耗时:" +  String.format("%.8fs", (t2 - t1) * 1e-9));
            for(int i : a){
                System.out.println(i);
            }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:手写一个快排(Java版)

          本文链接:https://www.haomeiwen.com/subject/aqettqtx.html