【问题标题】:Learning how to do quicksort学习如何进行快速排序
【发布时间】:2014-01-31 19:22:19
【问题描述】:

我在大学里试图学习如何使用快速排序。我将在几周内制作一个程序,但首先我想了解它是如何工作的。我发现了一个看起来可以帮助我理解的家庭作业问题。唯一的问题是,在查看了 Wikipedia 和其他几个网站之后,我感到困惑和绝望。

对序列 A = { 6, 4, 3, 9, 4, 7, 5 } 应用快速排序。而不是基于三中位数的枢轴,使用 第一个子序列元素。 (这引入了最坏情况下性能的风险,但它使 问题更容易手动解决。) 如下所示展示您的作品。通过在元素周围放置一个正方形来指示元素何时成为轴心。 稍后,通过在元素下划线来表明元素是/曾经是枢轴。使用点标记和箭头指示 左右搜索要交换的元素的进展情况。按照递归的要求进行工作: 也就是说,在右子序列之前处理左子序列。 也就是说,

6  4  3  9  4  7  5   识别枢轴

5  4  3  9  4  7  6   将轴移开并搜索要交换的元素

有人可以逐步向我解释这是如何工作的吗?

【问题讨论】:

  • 有许多可用的分区算法(用于围绕枢轴重新排列序列的算法)。你能描述一下你应该使用哪一个吗?
  • does this link help you?,工作原理的解释,以及它在不同情况下的作用的可视化。
  • 我认为维基百科解释得很好...en.wikipedia.org/wiki/Quicksort

标签: algorithm sorting


【解决方案1】:

一个简单的快速排序函数如下:

  1. 基于枢轴的分区 - 此枢轴函数的作用是将枢轴元素移动到正确的位置(就像它在排序数组中一样)。 正确的位置是指,枢轴左侧的所有元素都将小于枢轴元素,右侧的元素将大于 tan 枢轴。
  2. quicksort () elements from 0 to new_index of pivot // 这将使用分区方法递归地对左侧的元素进行排序
  3. quicksort() 元素从 new_indexof pivot +1 到最后一个索引 // 这样你就可以对右边的元素进行排序...

例如:

2 1 4 3 // first element as pivot,pivot =2
  1. 分区后

    1 2 4 3

  2. 快速排序(1)

    2.1 - 使用分区找到一个元素,这意味着它的排序 向左的数组 =(1)

  3. 快速排序(4,3)

    3.1 分区 4,3 数组向右 (3,4)

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 2011-04-10
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多