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

    1、算法思想:通过一趟排序将待排序记录分隔成独立的两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,从而达到排序目的。

    2、代码实现:

    public class QuickSort {
    public static void main(String[] args) {

    int[] array = {2, -5, 3, 1, 7, 4, 8, 6, 9};

    QuickSort quickSort = new QuickSort();
    int low = 0;
    int high = array.length - 1;
    quickSort.Sort(array, low, high);
    for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] );
    }
    }

    public void Sort(int[] arr, int from, int to) {

    int start = from;
    int end = to;
    int key = arr[from];
    while (end > start) {
    //从后向前比较
    //有比关键值小时交换
    while ((arr[end] >= key) && (end > start)) {
    end--;
    }
    //交换过程
    if (arr[end] <= key) {
    int temp = arr[end];
    arr[end] = arr[start];
    arr[start] = temp ;
    }

    //从前向后比较
    while ((arr[start] <= key) && (end > start)) {
    start++;
    }
    if (arr[start] >= key) {
    int temp = arr[end];
    arr[end] = arr[start];
    arr[start] = temp;
    }
    }
    //关键值左边序列
    if (start > from) Sort(arr, from, start - 1);
    //关键之右边序列
    if (end < to) Sort(arr, end + 1, to);
    }
    }
    注:另外还有优化的快速排序算法:1)采用随机选取方法选取关键值
                    2)采用三数取中法,三个关键字取中间值,一般取左、右、中三个数,也可随机选取。
    3、复杂度分析:1)最坏的情况是关键字为序列的端值是复杂度为O(log n)
            2)一般情况下为O(n log n)
  • 相关阅读:
    emberjs 循环中设置model的不同属性值
    FUTURE .get 异常抛出会如何提示
    cpu ,鲲鹏,x86,主频,门电路,目录
    复制两个类的相同属性
    【深入Java虚拟机(1)】:Java内存区域与内存溢出
    RPC web service
    webservice
    django中配置Pymsql
    定义函数和调用函数的方式,函数形参和实参的介绍
    python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/chump-zwl/p/7003835.html
Copyright © 2011-2022 走看看