quicksort:分治思想。

  分解:数组A[p, r)被划分成两个子数组A[pq) 和 A[q+1, r),使得A[pq)中的每个元素小于等于A[q], A[q]也小于A[q+1r)中的每个元素。q是划分过程要返回的结果。

  解决:递归调用quicksort,对子数组A[pq) 和 A[q+1, r)进行排序。

  合并:因为子数组都是原址排序的,所以不需要合并操作:A[pr)已经有序。

  代码数组下标从0开始,并且所有函数使用左闭右开区间。与算法导论第三版书上的伪代码不同的部分在注释标出。

  #include <IOSTREAM>

  #include <CSTDIO>

  #include

  #include <CTIME>

  #include <CSTDLIB>

  inline void swap(int &a, int &b)

  { int t = a; a = b; b = t; }

  int partition(int *a, int p, int r) { //对 a[p, r) 原址重排

  int x = a[r-1]; //a[r] ==> a[r-1]

  int i = p - 1;

  for (int j = p; j < r - 1; ++j)

  if (a[j] <= x) {

  ++i;

  swap(a[i], a[j]);

  }

  swap(a[i+1], a[r-1]);

  return i + 1;

  }

  void quicksort(int *a, int p, int r) { //调用quicksort(a, 0, n),不是(a, 0, n-1),区间a[0, n)

  if (p < r - 1) { //(p < r) ==> (p < r - 1)

  int q = partition(a, p, r);

  quicksort(a, p, q); //(a, p, q-1) ==> (a, p, q)

  quicksort(a, q+1, r);

  }

  }

  int main()

  {

  srand(time(NULL));

  int n;

  while (scanf("%d", &n)) {

  int a[n];

  for (int i = 0; i < n; ++i)

  a[i] = rand() % n;

  for (int i = 0; i < n; ++i)

  printf("%d ", a[i]);

  printf("\n");

  quicksort(a, 0, n);

  for (int i = 0; i < n; ++i)

  printf("%d ", a[i]);

  printf("\n");

  }

  } www.yz-jx.com

  随机测试几万组数据与stl 的sort产生结果一致。

C++快速排序实现(quicksort)的更多相关文章

  1. Javascript算法系列之快速排序(Quicksort)

    原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gis ...

  2. Java基础知识强化56:经典排序之快速排序(QuickSort)

    1. 快速排序的原理: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其 ...

  3. 快速排序(Quicksort)的Javascript实现

    日本程序员norahiko,写了一个排序算法的动画演示,非常有趣. 这个周末,我就用它当做教材,好好学习了一下各种排序算法. 排序算法(Sorting algorithm)是计算机科学最古老.最基本的 ...

  4. 排序算法之快速排序(Quicksort)解析

    一.快速排序算法的优点,为什么称之为快排? Quicksort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想. 所谓的分治思想就是对一个问题“分而治之”,用分治思想来解决问题需要两个 ...

  5. 快速排序(Quicksort)的Javascript实现(转载)

    日本程序员norahiko,写了一个排序算法的动画演示,非常有趣. 这个周末,我就用它当做教材,好好学习了一下各种排序算法. 排序算法(Sorting algorithm)是计算机科学最古老.最基本的 ...

  6. JavaScript实现快速排序(Quicksort)

    目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快.它是图灵奖得主 东尼·霍尔(C. A. R. Hoare)于1960时提出来的. ...

  7. 排序算法五:随机化快速排序(Randomized quicksort)

    上一篇提到,快速排序的平均时间复杂度是O(nlgn),比其他相同时间复杂度的堆排序.归并排序都要快,但这是有前提的,就是假定要排序的序列是随机分布的,而不是有序的.实际上,对于已经排好的序列,如果用快 ...

  8. JavaScript 快速排序(Quicksort)

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...

  9. 快速排序法QuickSort

    /** * * @author Administrator * 功能:交换式排序之快速排序 */ package com.test1; import java.util.Calendar; publi ...

  10. 快速排序算法(Quicksort)

    快速排序算法是对集合中元素进行排序最通用的算法,俗称快排,其算法的时间复杂度为O(nlgn),空间复杂度为O(1). 我们举例来对其算法思路进行理解,譬如数组 A = { 4, 8, 1, 2, 9, ...

随机推荐

  1. 等待事件--db file sequential read

    对于最小化db file sequential read 事件所带来的影响,你可以做的另一件事情是减少AVERAGE_WAIT时间. 这是会话必须等待从磁盘提取单块的平均时间,这些信息可以从v$ses ...

  2. pl/sql 在一个程序块里打印日志输出到表格

    declare v_number NUMBER; v_number2 NUMBER; begin execute immediate 'truncate table t2'; insert into ...

  3. 【HDOJ】1063 Exponentiation

    这道题目莫名其妙的wa,又莫名其妙的过了. import java.util.Scanner; import java.math.BigDecimal; public class Main { pub ...

  4. Linux&shell之处理用户输入

    写在前面:案例.常用.归类.解释说明.(By Jim) 命令行参数$1为第一个参数,$2为第二个参数,依次类推...示例: #!/bin/bash # using one command line p ...

  5. Qt入门(7)——QApplication类

    QApplication类管理图形用户界面应用程序的控制流和主要设置.它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度.也用于处理应用程序的初始化和结束,并且提供对话管理.它也处理 ...

  6. 【转】Linux I2C设备驱动编写(三)-实例分析AM3359

    原文网址:http://www.cnblogs.com/biglucky/p/4059586.html TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1 ...

  7. 读取Word文档的标题

    一:描述,将读取的文档标题添加到下拉框中 二:代码 #region 方法:得到Word文档标题的内容 public static List<string> GetTitles(int j, ...

  8. bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Statu ...

  9. Selenium webdriver 查找元素

    1.简单查找 By ID: WebElement element=driver.findElement(By.id("userId")); By Name:WebElement e ...

  10. java常用包

    java的核心类都放在java这个包以及其子包下,java扩展的许多类都放在javax包以及其子包下.这些实用类也就是平时经常说的API(应用程序接口). 以下几个是java语言中常用包 java.l ...