快速排序算法的C++实现

快速排序基本特性

时间复杂度:O(n*lgn)

最坏:O(n^2)

空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(lgn)

不稳定。

关于快速排序的空间复杂度,谢谢@命运他爹 同学指正。详述一下。

快速排序由于每次递归的时候会占用一个空间返回中间数位置,所以一次递归的空间复杂度为O(1)。

最好情况和最坏情况下的递归深度为O(lgn),相应的空间复杂度就是O(lgn)

最坏情况下的递归深度为O(n),空间复杂度为O(n)。

算法

QUICKSORT(A, p, r)
    if p < r
       then q ← PARTITION(A, p, r)   //关键
            QUICKSORT(A, p, q - 1)
            QUICKSORT(A, q + 1, r)

PARTITION(A, p, r)
      x ← A[r]
      i ← p - 1
      for j ← p to r - 1
           do if A[j] ≤ x
                 then i ← i + 1
                     exchange A[i] <-> A[j]
      exchange A[i + 1] <-> A[r]
      return i + 1

示例

待排序数组:7  3  5  9  8  5  1  10  4  6

一趟排序过程分析:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索递归
, 算法 c++
, 快速排序
, 排序
, 复杂度
, 空间
, 空间复杂度
, quicksort
, c++递归
, c++快速排序排序c
, c++ 排序
, c++排序算法
, 快速
复杂排序
java实现快速排序算法、快速排序算法实现代码、实现快速排序算法、c语言快速排序算法、c 快速排序算法,以便于您获取更多的相关知识。

时间: 2024-08-04 14:01:17

快速排序算法的C++实现的相关文章

如何实现快速排序算法

快速排序: 代码: <?php /** 快速排序算法 * 1. 在数组中找一个元素作为key,一般取数组第一个元素作为key * 2. i=0, j=数组长度-1 * 3. j-- 当 arr[j]<key, arr[i]与arr[j]交换位置 * 4. i++ 当 arr[i]>key, arr[i]与arr[j]交换位置 * 5. 重复3,4 直到 i==j 时,完成. * 6. 将key分隔的左右两组元素再分别执行 1,2,3,4,5 (递归). */ $arr = array()

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

经典的快速排序算法, 作为一个编程者, 任何时候都要完整的手写. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min, int max) { int random = rand() % (max - min + 1) + min

采用部分快速排序算法实现数组的部分排序

快速排序算法,网上相关文章已经介绍的很多了,数据结构教材中也有很详 细的介绍.本文需要阐述的不是全排序快速排序算法,而是部分快速排序算法. 所谓部分快速排序算法是指通过排序获取一个数列中最大的若干条有序记录.比如我们需要从一个有1百万记录的数组中获取前100条有序记录,并按从大到小顺 序显示给用户,这种应用在搜索引擎中经常被使用,很少会有人有耐心将100万 条搜索出来的记录都阅读一遍,一般阅读前几百条纪录就可以得到自己满意的答案.其实这种算法很像SQLSERVER 中的TOP n 的实现,不过数

快速排序算法的JAVA实现

package Utils.Sort; /** *快速排序,要求待排序的数组必须实现Comparable接口 */ public class QuickSort implements SortStrategy { private static final int CUTOFF = 3; //当元素数大于此值时采用 快速排序 /** *利用快速排序算法对数组obj进行排序,要求待排序的数组必须实现了 Comparable接口 */ public void sort(Comparable[] obj

Ruby实现的3种快速排序算法

  这篇文章主要介绍了Ruby实现的3种快速排序算法,本文给出了快速排序的普通版本.快速排序的随机化版本.快速排序的利用了Ruby的语法糖的随机化版本三个版本,需要的朋友可以参考下 刚学Ruby,正巧算法老师鼓励用不熟悉的语言来写算法,我就用Ruby吧~~ 话说Ruby可真是超厉害,好多凭直觉的方法都可以用.....无限膜拜中.... 期间我遇到了invalid multibyte char (US-ASCII)的错误,解决办法是在开头加一个#encoding:utf-8 这个错误在stacko

Java实现快速排序算法(Quicktsort)

 这篇文章主要介绍了Java实现快速排序算法(Quicktsort),有需要的朋友可以参考一下 快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作.基准元素的选取对算法的效率影响很大,最好的情况是两个子数

PHP两种快速排序算法实例

 这篇文章主要介绍了PHP两种快速排序算法实例,本文直接给出实现代码,分别使用递归法.迭代法实现,需要的朋友可以参考下     虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略.所以在此介绍递归排序和迭代排序. 递归法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /** *

ERLANG实现快速排序算法

问题描述 快速排序算法的思路:就是选择一个数,将比它小的放到它的一侧,比它大的放到另外一侧;然后将两侧继续递归下去按照这个方法进行排序直到排序完成.这里演示的是ERLANG的列表解析用法.然后来整理下几个语法特性-export().这个表示导出myqsort函数,然后有一个参数.这个L是一个列表X来自于列表,然后X要满足X < T这个数才能放进这个列表.-module(lib_misc).-export(). myqsort([]) -> [];myqsort() -> myqsort(

c#-C#不依赖任何系统库函数,编写一个快速排序算法的程序,要求使用递归,越简单越好

问题描述 C#不依赖任何系统库函数,编写一个快速排序算法的程序,要求使用递归,越简单越好 C#不依赖任何系统库函数,编写一个快速排序算法的程序,要求使用递归,越简单越好 解决方案 先mark下,没有环境,回头给你写 解决方案二: 二分查找的递归算法和非递归算法 解决方案三: 快速排序的递归和非递归实现