美文网首页
快速排序Java\C++版实现,和其他复制粘贴的不一样,既简单又

快速排序Java\C++版实现,和其他复制粘贴的不一样,既简单又

作者: 程序兔子 | 来源:发表于2021-11-21 11:33 被阅读0次

原理

快速排序体现的是一种分治的思想,它的核心思想是化整为零。每次在待排序列A[p…r]中去一个标杆,然后我们将这个序列划分为两部分,使得A[p…q…r]满足q左边的元素都小于或等于q,q右边的元素都大于q。然后我们在对A[p…q]和A[q…r]实行相同的操作,重复下去最终会得到排好序的序列。

实现

语言描述的或许不是很清晰,而且大部分人应该都知道快速排序的原理,可能与本文所说的有出入,但是大致都差不多。

所以我们要实现快速排序首先需要实现一个子函数partition(A,p,r),这个函数的作用是将数组A中的p到r的元素进行一个划分,一边划分为大于A[r]的,一边小于等于A[r]。

在实现了子函数partition(A,p,r)之后,我们就可以写出递归版本的快速排序了。

java 完整代码

C/C++版本

其实这个版本是基于C写的,没有涉及c++的迭代器,模板等。还是很简单的,就为了代码的复用性用的是空指针传参数,其他的没啥亮点。相对于java版本的多了一个 int (*comp) 这个函数用来规定比较的方法,通过传入不同的比较函数可以实现对不同数据类型的按规则排序,比如降序我就不用再写一个新的方法了,只需要始兴县一个intLess()。然后注意到这里用了一点点优化,因为快速排序如果按照我们之前的思路实现的话会出现一个问题,如果partition()函数每次划分完毕后的序列大小不一致,那么我们的递归树会很深,这样会消耗很多时间,所以为了让时间递归树的深度相对降低一点我们做一点小技巧,每次不再取key = A[r],而是key = A[rand(p,r)]。

以上就是这篇文章的全部内容,学习更多Java基础知识快戳视频链接开始吧

相关文章

  • 快速排序

    手写java版快速排序算法实现

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 快速排序

    快速排序Java实现

  • 常见排序算法

    希尔排序,快速排序,堆排序,2路归并算法的c++简单实现 在 里面写了一个随机数列生成,可以快速验证算法的正确性 ...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 五种常见排序算法实现(Java)

    Java-五种排序算法实现 前言及准备 这篇我们会介绍比较简单的五种排序算法:插入排序、冒泡排序、快速排序、选择排...

  • C++编写算法 (四)——排序问题进阶,快速排序

    快速排序,是应用最广泛的排序方法。快速排序流行的原因是它实现简单、适用于各种不同的输入数据且在一般应用中比其他排序...

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

网友评论

      本文标题:快速排序Java\C++版实现,和其他复制粘贴的不一样,既简单又

      本文链接:https://www.haomeiwen.com/subject/qixbtrtx.html