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)
  • 相关阅读:
    机器学习:特征选择方法简介
    VS快捷键
    非常适用的Sourceinsight插件,提高效率【强力推荐】
    Linux静态库和共享库
    C/C++ 位域知识小结
    __BEGIN_DECLS 和 __END_DECLS
    C语言可变参数va_list
    mac的terminal快捷键
    linux进程、线程与cpu的亲和性(affinity)
    C++ Singleton (单例) 模式最优实现
  • 原文地址:https://www.cnblogs.com/chump-zwl/p/7003835.html
Copyright © 2011-2022 走看看