关闭

快速排序算法

标签: 算法-java
163人阅读 评论(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
查看评论

Java快速排序算法的实现

java工程师笔试必考算法题
  • wsxujiacheng
  • wsxujiacheng
  • 2016-11-01 10:28
  • 278

【图文解释】快速排序算法

高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序。首先在这个序...
  • guomutian911
  • guomutian911
  • 2015-11-18 20:38
  • 903

尝试使用python实现快速排序算法

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的...
  • python613
  • python613
  • 2017-02-01 22:38
  • 819

真正的快速排序算法javascript实现

原理分析: 其基本思想是选取其中一个值,经过一轮排序,将小于此值的数据放置其左(右)边,大于此值的数据放置于其右(左)边, 这样就完成一次快速排序,进而通过递归对左右两侧分别进行快速排序,直到排序组内都剩余1项为止。 还是以数组[1,4,7,2,6,8,3,5,9]举例: 假设我们选取中间值6作为中...
  • u012545279
  • u012545279
  • 2013-12-19 11:43
  • 2604

快速排序算法的C/C++语言实现

这是很多课本教材上的算法描述,主要是递归版本的。 #include //26/10/12 10:00 //一次划分 int one_partition(int a[],int i,int j) { int temp = a[i]; while(i<j){ ...
  • dujian996099665
  • dujian996099665
  • 2012-11-14 11:33
  • 933

Java实现算法之快速排序

本文参考了:http://blog.csdn.net/morewindows/article/details/6684558 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微...
  • Rebirth_Love
  • Rebirth_Love
  • 2016-05-08 14:21
  • 1087

快速排序算法详解与实现

快速排序是一种分治排序算法。广泛认为它是解决一般问题的最佳排序算法。同插入排序一样,快速排序也属于比较排序的一种,而且不需要额外的存储空间。在处理中到大型数据集时,快速排序是一个比较好的选择。 由于快速排序是一种分治算法,因此可以用分治法的思想将排序分为三个步骤 1.分:设定一个分割值将数据分为两部...
  • kevin_Luan
  • kevin_Luan
  • 2014-07-13 11:57
  • 3061

经典算法之一:快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排...
  • hurmishine
  • hurmishine
  • 2016-12-20 21:28
  • 1125

快速排序 图解算法过程

步骤一:划分 (1)选择数组的尾元素做为支点,支点选择方案有很多。 (2)把>=支点的元素放到右边。 (3)把<=支点的元素放到左边。 (4)将支点放到正确的位置。 步骤二:递归 对支点左右两边的子数组再分别调用步骤一,直到子数组长度为1。
  • collonn
  • collonn
  • 2013-12-28 12:47
  • 5876

快速排序算法原理,实现,以及时间复杂度分析

#include<iostream> using namespace std;int count=0; int scount=0; int cycled=0;void output(int *a,int n){ for(int i=0;i<n;i++)cout<<...
  • xdyzyh
  • xdyzyh
  • 2016-09-07 20:19
  • 1514
    个人资料
    • 访问:2403次
    • 积分:139
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论