Sort-Quick Sort 快速排序

作者: FromThenOn | 来源:发表于2017-01-09 19:47 被阅读31次

    算法相关GitHub持续更新,欢迎打脸~

    排序算法之选择排序

    时间复杂度:O(n2)

    空间复杂度:O(1)

    是否稳定:不稳定 1

    算法:

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

    Java实现如下

    package prs.rfh.algorithm.sort;
    
    /**
     * @author Swift
     * @version $Algorithm: QuickSort, v 0.1 2017/1/9 16:54 Swift Exp $$
     */
    public class QuickSort {
    
        /**
         * 选取数组的begin位元素为标志位,并通过与数组的其他元素交换位置来使该元素以前的
         * 元素都不比他本身大,以后的元素都不比他小。然后递归的排序其以前和以后的部分
         * @param array
         * @param begin
         * @param end
         * @return
         */
        private static int[] quickSort(int[] array, int begin, int end) {
    
            int index = begin;
            int i = end,j=begin;
            //使该元素以前的元素都不比他本身大,以后的元素都不比他小
            while(i>j) {
                for (;i > index; i--) {
                    if(array[index]>array[i]){
                        int temp = array[index];
                        array[index] = array[i];
                        array[i] = temp;
                        index = i;
                    }
                }
                for (; j < index; j++) {
                    if(array[index]<array[j]){
                        int temp = array[index];
                        array[index] = array[j];
                        array[j] = temp;
                        index = j;
                    }
                }
            }
            //分两部分递归调用
            if (index-begin>2) quickSort(array, begin, index-1);
            if (end - index + 1 >2) quickSort(array, index + 1, end);
            return array;
        }
    
        public static int[] quickSort(int[] array) {
            if (array==null)
                throw new IllegalArgumentException("参数非法");
            return quickSort(array, 0, array.length-1);
        }
    }
    

    【1】稳定性:

    快速排序会因为与index的交换而破坏稳定性,所以选择排序不是一个稳定的排序算法。</br>
    <i>@author Swift</i>
    <i>@date 2017-1-9</i>

    相关文章

      网友评论

        本文标题:Sort-Quick Sort 快速排序

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