• 快速排序


    快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    实现代码:

    package com.charles.algorithm;
    
    public class QuickSort {
    
        public static void main(String[] args) {
    
            int[] data = new int[] { 4, 6, 8, 2, 5, 1, 0, 4, 8, 2 };
            quickSort3(data, 0, data.length - 1);
            for (int item : data) {
                System.out.print(item + " ");
            }
            System.out.println();
        }
    
        // One: make the first item to be index
        public static void quickSort(int[] data, int low, int high) {
            if (low >= high) {
                return;
            }
            int clow = low, chigh = high;
            int index = data[low];
            while (low < high) {
                while (low < high && data[high] >= index) {
                    high--;
                }
                data[low] = data[high];
                while (low < high && data[low] <= index) {
                    low++;
                }
                data[high] = data[low];
            }
            data[low] = index;
            quickSort(data, low + 1, chigh);
            quickSort(data, clow, high - 1);
        }
    
        // Two: make the middle item to be index
        public static void quickSort2(int[] data, int low, int high) {
            if (low >= high) {
                return;
            }
    
            int clow = low, chigh = high;
            int middle = (low + high) / 2;
            int index = data[middle];
            while (low <= high) {
                while (low <= high && data[low] < index) {
                    low++;
                }
                while (low <= high && data[high] > index) {
                    high--;
                }
                if (low < high) {
                    middle = data[low];
                    data[low++] = data[high];
                    data[high--] = middle;
                } else {
                    low++;
                    high--;
                }
    
            }
            quickSort2(data, clow, high);
            quickSort2(data, low, chigh);
        }
    
        // Three: make the middle item to be index
        public static void quickSort3(int[] data, int low, int high) {
            if (low >= high) {
                return;
            }
    
            int clow = low, chigh = high;
            int middle = (low + high) / 2;
            int index = data[middle];
            while (low < high) {
                while (low < high && data[low] < index) {
                    low++;
                }
                while (low < high && data[high] > index) {
                    high--;
                }
                if (low < high) {
                    middle = data[low];
                    data[low++] = data[high];
                    data[high--] = middle;
                } else {
                    if (data[low] > index) {
                        high--;
                    } else {
                        low++;
                    }
                    break;
                }
    
            }
            quickSort3(data, clow, high);
            quickSort3(data, low, chigh);
        }
    
    }
     
  • 相关阅读:
    shell遍历文件夹并执行命令
    安装PIL的坑
    iptables不小心把127.0.0.1封了,导致redis连不上
    python读取中文
    不要在基类析构函数中调用纯虚函数,否则运行时会报错“pure virtual method called”
    阿里云64位centos6.3系统上编译安装redis
    Git
    Easy Mock
    Sortable
    几个框架
  • 原文地址:https://www.cnblogs.com/itachy/p/7196963.html
Copyright © 2020-2023  润新知