• 7 Java 快速排序


    快速排序(Quicksort)是对冒泡排序的一种改进。

    1、基本思想

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以 递归进行,以此达到整个数据变成有序序列。

    2、算法描述

    快速排序使用分治策略来把一个序列( list )分为两个子序列(sub-lists)。步骤为:

    ①.从数列中挑出一个元素,称为基准(pivot)。

    ②.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

    ③. 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    递归到最底部时,数列的大小是0或1,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

    3、代码实现

    public class QuicklySort {
    
        public static void main(String[] args) {
            Long startTime = System.currentTimeMillis();
            //int[] array = new int[]{10, 1, 9, 2, 8, 3, 7, 4, 6, 5};
            int[] array = new int[100000];
            for (int i = 0; i < 100000; i++) {
                array[i] = (int) (Math.random() * 100000);
            }
            quicklySort(array, 0, array.length - 1);
            Long endTime = System.currentTimeMillis();
            System.out.println(endTime - startTime);
        }
    
        public static void quicklySort(int[] array, int low, int high) {
            if (null == array || array.length <= 0) {
                return;
            }
            if (low >= high )
            {
                return;
            }
    
            int left = low;
            int right = high;
            int key = array[left];
            while (left < right) {
                // right左移直到获取到比key小的元素
                while (left < right && array[right] >= key) {
                    right--;
                }
                while (left < right && array[left] <= key) {
                    left++;
                }
                if (left < right) {
                    swap(array, left, right);
                }
            }
            swap(array, low, left);
            //System.out.println(Arrays.toString(array));
            quicklySort(array, low, left - 1);
            quicklySort(array, left + 1, high);
        }
    
        private static void swap(int array[], int low, int high) {
            int tmp = array[low];
            array[low] = array[high];
            array[high] = tmp;
        }
    
    }
    View Code
  • 相关阅读:
    request和request.form和request.querystring的区别
    设计模式—单例模式
    设计模式--单例模式之Lock
    一般处理程序
    C#使用wkhtmltopdf.exe,HTML页面转化为PDF文档
    iTextSharp 使用详解(转)
    简单工厂模式
    单例模式防反射及性能(二)
    java单例模式
    java学习笔记之基础语法(二)
  • 原文地址:https://www.cnblogs.com/Latiny/p/11076493.html
Copyright © 2020-2023  润新知