快速排序算法

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值