排序算法之----快速排序(快速上手快速排序)

标签: 排序算法入门
41人阅读 评论(2) 收藏 举报
分类:

排序算法之----快速排序(快速上手快速排序)

何为快速排序算法?

快速排序的基本思想又是什么?

其实很简单:

快速排序的基本思想是

1、先从数列中取出一个数作为基准数(这里我们的算法里面取数组最右边的元素作为基准数,节省了一个变量 0。0)

2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数(这里涉及到一个递归的过程)

题外话说一句(快速排序有两种:一种是标准快速排序;一种是随机快速排序,后面会讲到0.0)


首先,在实现对数组排序之前,我们先来实现一个小目标,将小于等于数组最右边的元素放在左边;大于数组最右边的元素放在右边。(透露一个小秘密,不知道你有没有发现,如果这样不断循环递归下去的话,当左右两边都只剩一个元素的时候,数组已经排好序了0。0)

行,那现在让我们来实现我们的小目标:

就是所谓的patition过程:

定义两个指针L和R,定义两个区域Less和More,

具体过程如下图所示:


(不好意思,时间问题,写的有点简陋,有疑问的可以直接在下面留言哦0。0)

下面附上程序源码:

// 理解了快速排序的具体原理或者说具体操作,实现起来不是很难,定义两个缓存变量,

// 两个指针通过传参得到。要对过程很清晰,>arr[R]怎么样,<arr[R]怎么样,等于又怎么样


  最后记得将大于区域最后一个数与大于区域最左边的数进行交换,即arr[R]与arr[more]


有了这个patition过程,快排的基本功能已经实现了

下面是整体的排序:

其中,24行这样做其实就省去了在测试时提供要排序的下标的步骤,直接全排(因为我们这个函数实现的是给定任何两个下标, 就可以对下标范围之间的元素进行排序了)

30行这里就体现了随机快速排序和标准快速排序的区别了,这里在L和R之间随机选择一个数与最后一个数位置交换,包含概率因素,使其平均时间复杂度就变小了,34和35行就是递归过程了。


另外用eclipse提供的方法来比较自己的算法是否正确:


查看评论

排序算法系列:快速排序算法

本文就来说说交换排序的最后一拍:快速排序算法。本文就其原理、过程及实现几个方面讲解一下快速排序算法。...
  • u013761665
  • u013761665
  • 2016-03-01 15:40:07
  • 33366

冒泡,去重,快速排序选择排序几种算法

arr =[‘9’,’8’,’7’,’6’,’5’,’4’,’3’,’2’,’1’,’0’]冒泡排序有两个循环外循环循环一次能把乱序数组里的最大值找出来放在相应的位置,内循环循环一次是执行外循环找到这...
  • chenjieone
  • chenjieone
  • 2017-02-11 18:25:40
  • 578

C++简单排序算法之快速排序

快速排序是由东尼•霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n l...
  • zhengjuexi4456
  • zhengjuexi4456
  • 2016-09-20 13:03:44
  • 9209

php 二维数组快速排序算法

二维数组快速排序 快速排序
  • xingjigongsi
  • xingjigongsi
  • 2014-04-01 21:47:16
  • 1462

算法系列(四)排序算法中篇--归并排序和快速排序

在算法系列(三)排序算法上篇 一文中,介绍了冒泡排序,插入排序和选择排序算法。这篇文章继续讲解排序算法。 概述 冒泡排序,插入排序和选择排序算法这些算法的时间复杂度都是O(N^2),是否有更高效的排序...
  • robertcpp
  • robertcpp
  • 2016-05-30 23:04:57
  • 4695

【图解算法】排序算法——快速排序

简介 首先还是得简单的介绍一下快速排序这个算法。 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况...
  • xiaoping0915
  • xiaoping0915
  • 2017-06-13 19:25:10
  • 3096

随机化的快速排序

快排是所有排序算法中平均性能最好的一种pai
  • wangyulinyy
  • wangyulinyy
  • 2014-09-15 18:39:06
  • 1411

iOS算法(一)快速排序算法

快速排序是当遇到较大数据时,排序快,高效的方法(公司面试时,基本上会被问到...) 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于...
  • m372897500
  • m372897500
  • 2016-05-16 13:04:50
  • 2803

我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》

如果以上C代码看不懂,请看下面java代码: public static int Partition(int[] a,int p,int r){   int x=a[r-1];   int i=p-1...
  • vayne_xiao
  • vayne_xiao
  • 2016-12-07 17:49:42
  • 22829

小白学数据结构——四、排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)

排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们通常所说的排序算法往往指的是内部排序算法,...
  • qq_33414271
  • qq_33414271
  • 2017-11-14 11:37:44
  • 5166
    个人资料
    持之以恒
    等级:
    访问量: 405
    积分: 298
    排名: 27万+
    文章存档
    最新评论