关闭

java实现快速排序

标签: java快速排序排序算法pivot
466人阅读 评论(0) 收藏 举报
分类:

快速排序是平均速度最快的排序算法,他的平均时间复杂度 n*log n)

图片来源 维基百科

快速排序采用分治法来进行排序,首先先给出一个数组,在一开始随意选择一个数pivot,已pivot作为这个数组的分界点,把大于pivot的数放在右边,小于pivot的数放在左边,然后在已pivot的两边分界点,右进行一次上一次的操作,这样就能达到排序的目的了,

好了,我们来看一下代码。

private static void partition(int[] array,int left,int right) {//这里是传递的数组与最左边点与最右边点
        int i = left,j=right;
        int pivot =array[(left+right)/2];//我们已将这个数组的最中间的值作为分界点

        while (i<=j) {  //当中间的值与两边的值比较与交换完,结束循环,递归另外两个被分割的数组

        while (array[i]<pivot) {//从传递进来的最左边开始如果array[i]小于中间值就那么下边就往右 移动一次
            i++;
        }
        while (array[j]>pivot) {
        //如果array[j]大于中间值就那么下边就往左 移动一次
            j--;

        }
        if (i<=j) {//当已中间值为分界点的两边,没有比较完就交换

            int temp=array[i];
            array[i]=array[j];
            array[j]=temp;
            i++;
            j--;
            /*
            *如果两边都满足了条件就交换位置,然后位置都向前移动
            */

        }

        }   
        //第一次中间点比较完之后,就要开始比较另外两边了
        if (left<j) {

            partition(array, left, j);

        }
        if (i<right) {
            partition(array, i, right);

        }


    }

这段代码就是快速排序了,我们对这个数组进行了,分治法,首先把一个数组分成两个数组,两个数组要中间值对两个数比较完了之后又会把这和两个交换完的数组分成4个数组,进行找中间值,比较操作。

我们来看一下结果

这就是运行结果了

2
0
查看评论

快速排序——JAVA实现(图文并茂)

高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你...
  • as02446418
  • as02446418
  • 2015-08-10 11:08
  • 2560

【排序算法】快速排序原理及Java实现

快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。同时采用“分而...
  • jianyuerensheng
  • jianyuerensheng
  • 2016-04-27 09:08
  • 26506

java编程题:用Java实现一个快速排序算法

/** * java编程题:用Java实现一个快速排序算法 * * 快速排序是对冒泡排序的一种改进。 * * 快速排序的基本思想: * 通过一趟排序将要排序的数据分成独立的两部分,其中一部分的所有数据(左边的数据)都比 * 另外一部分的所有数据(右边的数据)都要小,然后再按...
  • min996358312
  • min996358312
  • 2017-03-23 14:32
  • 696

快速排序(Quicktsort)之Java实现

快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个...
  • kimylrong
  • kimylrong
  • 2013-12-05 13:14
  • 42666

快速排序法 java实现 三种方法实现

快速排序法 (1)定义 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 (2)快速排序的三个步骤 选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准&q...
  • u013276277
  • u013276277
  • 2017-05-18 14:27
  • 962

排序算法之快速排序的思想以及Java实现

1 基本思想 快速排序是在冒泡排序的基础上改进而来的,它是基于分治的思想。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使得整个数据变成有序序列。2,算法的实现(Java)...
  • whq19890827
  • whq19890827
  • 2016-08-14 21:59
  • 1003

快速排序 的原理及其java实现(递归与非递归)

快速排序 的原理及其java实现(递归与非递归)
  • mine_song
  • mine_song
  • 2017-03-20 09:25
  • 393

Java单链表实现快速排序

普通快排的思路选择1个结点为中心点,保证中心点左边比中心点小,中心点右边比中心点大即可。这就是一次快排,确定一个数的正确位置,然后进行递归。单链表的实现为 使第一个节点为中心点 创建2个指针(p,q),p指向头结点,q指向p的下一个节点 q开始遍历,如果发现q的值比中心点的值小,则此时p=p->...
  • bug_moving
  • bug_moving
  • 2017-02-23 18:08
  • 1621

快速排序非递归算法的java实现

package edu.pku.ss.hlj; import java.util.Stack; public class QuickSort { /** * @param args */ public static void main(Stri...
  • hanleijun
  • hanleijun
  • 2014-03-19 16:21
  • 1406

Java实现常见的排序算法之快排(快速排序)

快速排序算法是也,笔试面试中常被拿来做为问题,要求写出其实现过程和思想
  • u011437847
  • u011437847
  • 2016-05-12 11:03
  • 5528
    个人资料
    • 访问:112178次
    • 积分:1387
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:3篇
    • 译文:0篇
    • 评论:32条
    博客专栏
    最新评论