关闭

快速排序算法

标签: 算法-java
126人阅读 评论(1) 收藏 举报
分类:

1.快排简介

快速排序采用的思想是分治思想

2.举例

迭代的思想

a[1….i]放比主元小的数,a[i+1….j]放比主元大的数

3.代码

/**
 * 快速排序
 * 
 * @author tujinpeng
 * 
 */
public class QuickSort {
    /**
     * 划分a[p...........q],主元是a[p] 
     * a[1....i]放比主元小的数
     * @param a
     * @param p
     * @param q
     * @return
     */
    public static int partition(int[] a, int p, int q) {
        int x = a[p];
        int i = p;
        for (int j = p + 1; j <= q; j++) {
            if (a[j] < x) {
                i++;
                exchange(a,j,i);
            }
        }
        exchange(a,p,i);
        return i;
    }

    /**
     * 快速排序
     * 
     * @param a
     * @param p
     * @param q
     */
    public static void quickSort(int[] a, int p, int q) {
        if (p < q) {
            int part = partition(a, p, q);
            quickSort(a, p, part - 1);
            quickSort(a, part + 1, q);
        }
    }

    /**
     * 交换
     * @param a
     * @param postion1
     * @param postion2
     */
    private static void exchange(int[] a, int postion1, int postion2) {
        int temp = a[postion1];
        a[postion1] = a[postion2];
        a[postion2] = temp;
    }

    public static void main(String[] args) {
        int a[] = { 3, 2, 7, 4, 0, 5, 6 };
        quickSort(a, 0, 6);
        for (int e : a) {
            System.out.println(e);
        }
    }
}

4.时间复杂度分析

最差的时间复杂度 O(n2)

平均时间复杂度 O(n*logn)

5.快排优化

主元随机选取

选取数组第一个数,最后一个数,中间数,然后排序,中间的数作为主元

当子数组长度小到一定程度时,可以选取数量少排序快的算法(例如插入排序)

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1415次
    • 积分:130
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论