C语言,快速排序算法
C语言,快速排序算法求详细分析这段快速排序的代码,quicksort(a,0,N-1)这里0和N-1代表是下标还是元素,又或者简单的数字0和9,还有递归那段请详细分析...
C语言,快速排序算法求详细分析这段快速排序的代码,quicksort(a,0,N-1)这里0和N-1代表是下标还是元素,又或者简单的数字0和9,还有递归那段请详细分析
展开
展开全部
你好!
首先 0 ,n-1 。应该是 数组的坐标(因为n个数字。所以数组的坐标是0 到n-1)
而a是你传入的数组。所以他会根据数组的坐标到数组中找到元素。比较并进行排序。
递归这段理解如下:
首先要了解快速排序的思想:
1)随意找一个基准数 。将比基准小的都放到它左边。比它大的都放到它右边。所以当返回基准的坐标的时候。其实这个坐标左边都是小于它的,右边都是大于等于它的。(这里主要是看代码的实现。图中代码是大于等于在右边。也可以自己写小于等于在左边。这个不影响最后结果)
2)那么第二次对于返回基准坐标的左右两边。我们同样利用返回的基准坐标找到两个“基准”(如下图)。就会使得返回的这两个基准左右两边有序
第三次 用返回的两个基准找到四个基准(如图)
然后不断递归..不断的在整体有序的情况下使局部变的有序。
假设 为 532348789
第一次以a【0】 5为基准 。
则:
图中红色标识为基准元素 最后会使得数组全局有序。
希望能对你有所帮助。
更多追问追答
追问
思想我大概知道了,那两段while循环是怎么执行的,如果while()循环条件不成立的话?感觉有点看不懂,while没有{}的话他怎么执行?
还有,分割好左右数组后。那个quick的那个子函数是怎么进行快速排序的?
展开全部
0和N-1表示的是数组下标。快排每一趟排序的目的是使值比设定的key值小的数都排到数组前部分,大的都排到后部分;然后对这两部分用新的关键值key分别重复上一步的操作;递归,直到数组有序。
其中关键值key=a[low]。
用题目给定的数组模拟第一趟排序如下:
下标 0 1 2 3 4 5 6 7 8 9
值 9 16 47 82 4 66 12 3 25 51
low=0 high=9
part_element=a[low]=9
进入for循环
进入第一个while
part_element<51,于是high--,high=8;
part_element<25,high--,high=7;
part_element>3,不满足,结束while
a[low]=a[0]=a[high]=a[7]=3,low++,low=1;
进入第二个while
part_element<16,不满足,结束while
a[high]=a[7]=a[low]=a[1]=16,high--,high=6
for第一个循环结束,数组如下
3 16 47 82 4 66 12 16 25 51
low=1,high=6
for第二个循环同上,结束时数组如下
3 4 47 82 47 66 12 16 25 51
low=2,high=3
for第三个循环,第一个while中high--以后,low==high,直接break跳出for循环,此时
3 4 47 82 47 66 12 16 25 51
low=2,high=2
结束for以后
a[high]=a[2]=part_element=9,得到
3 4 9 82 47 66 12 16 25 51
split函数return high=2
quicksort函数中middle=2;
下面两句递归,仍然是调用split函数,对数组
0-2,3-9两部分分别重复上述操作
最后直到数组数据有序
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询