C语言快速排序算法

发布于:2019-05-13   编辑:admin 浏览:

  C语言,快速排序算法求详细分析这段快速排序的代码,quicksort(a,0,N-1)这里0和N-1代表是下标还是元素,又或者简单的数字0和9,还有递归那段请详细分析...

  C语言,快速排序算法求详细分析这段快速排序的代码,quicksort(a,0,N-1)这里0和N-1代表是下标还是元素,又或者简单的数字0和9,还有递归那段请详细分析

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  知道合伙人互联网行家采纳数:24获赞数:23热爱互联网,热爱研究各种技术 。目前醉心于大数据开发。向TA提问展开全部你好!

  首先0,n-1。应该是数组的坐标(因为n个数字。所以数组的坐标是0到n-1)

  而a是你传入的数组。所以他会根据数组的坐标到数组中找到元素。比较并进行排序。

  1)随意找一个基准数。将比基准小的都放到它左边。比它大的都放到它右边。所以当返回基准的坐标的时候。其实这个坐标左边都是小于它的,右边都是大于等于它的。(这里主要是看代码的实现。图中代码是大于等于在右边。也可以自己写小于等于在左边。这个不影响最后结果)

  2)那么第二次对于返回基准坐标的左右两边。我们同样利用返回的基准坐标找到两个“基准”(如下图)。就会使得返回的这两个基准左右两边有序

  希望能对你有所帮助。更多追问追答追问思想我大概知道了,那两段while循环是怎么执行的,如果while()循环条件不成立的话?感觉有点看不懂,while没有{}的话他怎么执行?还有,分割好左右数组后。那个quick的那个子函数是怎么进行快速排序的?追答恩,根据你图中的代码(老实讲,这图下次可以放好一些。方便看)

  划分为左右数组之后。quicksort子函数。就把每个数组。再次分为两个左右数组

  而返回中间基准坐标的函数,不仅是返回了基准的坐标,还按照基准把元素分成两部分了

  (我们知道这两部分相对来说是有序的,一部分都比另一部分大。但是单独一部分的内部是无序的)

  。所以quicksort利用返回基准的函数。把自己传入的区间范围的元素。分为大小两个部分。

  while条件不成立的线)说明比较元素的坐标已经移动到当前位置,不需要在移动(此轮比较已经完成)

  我也知道,两个quick,一个是整理左边数组排序,一个是整理是右边数组排序。

  但还是不明白,比如刚 才说的那个,10 3 6 7 12 15 18!12是分割元素的!不明白10是怎么排序过去的?

  while循环。第一个while从最后面开始遍历。比基准小的。会跟基准换位置。

  第二个while 再从前面遍历。比基准大的。跟基准换位置。你可以按照程序流程走一走。

  就是分成两个数组。每个数组在调用quic分为两个数组。再次调用。 直循环调用到最后。

  脑子有点笨,a[0]-a[3]是怎么从10 3 6 7变成3 6 7 10的?

  展开全部0和N-1表示的是数组下标。快排每一趟排序的目的是使值比设定的key值小的数都排到数组前部分,大的都排到后部分;然后对这两部分用新的关键值key分别重复上一步的操作;递归,直到数组有序。其中关键值key=a[low]。用题目给定的数组模拟第一趟排序如下:下标0123456789