![](https://lstatic.shangxueba.com/jiandati/h5/images/m_q_title.png)
快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分
![快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部](https://img2.soutiyun.com/ask/uploadfile/10305001-10308000/0caf91f3551773264870e4fb5c26db86.png)
A.分治
B.动态规划
C.贪心
D.回溯
A.分治
B.动态规划
C.贪心
D.回溯
排序
实验目的:
(1)熟练掌握在顺序表上实现排序的各种方法。
(2)深刻理解各种排序方法的特点,并能灵活运用。
(3)掌握和理解本实验中出现的一些基本的C语言语句。
(4)体会算法在程序设计中的重要性。
实验内容:
编写一个排序菜单程序,在其中调用不同的排序算法,实现对任意无序序列的递增排序操作。在主程序中输入初始序列,分别调用直接插入排序、冒泡排序、直接选择排序、快速排序等排序算法,输出排序后的结果。题目要求:在所有的排序算法中,待排序数据均从数组的0单元放起。
【Test-10-4】下面算法的功能是:为了保证快速排序在最坏情况也有较高的排序效率,可选待排序序列的第一个元素、最后一个元素和位置位于最中间的一个元素,在三者之中选择一个其值居中的元素,将其交换到待排序序列的第一个元素位置,再做一趟划分。 若设整数数组A有n个元素,设计一个函数,实现上述三者取中并交换到待排序序列第一个元素位置的功能。请在空白处填入正确的语句。 void mediacy(ElemType A[ ], int low, int high) { ElemType temp; int k = (_______①______) ? high : low; //两个子女中 k 指示大者 int ________②________; if(_______③________) { //最大值交换到 mid 位置 temp = A[mid]; A[mid] = A[k]; A[k] = temp; } if(________④_______) { //比较两个小的,大者调到 low temp = A[high]; A[high] = A[low]; A[low] = temp; } }
下面是一个快速排序的逆归算法。为了避免最坏情况,取基准记录pivot采用从lelt,right和中取中间值,并交换到low位置的办法。数组A存放待排序的一组记录,数据类型为T,left和right是待排序子区间的最左端点和最右端点。
(1)实现三者取中子程序mediancy(A,left,right);
(2)改写QuickSort算法,不用栈消去第二个递归调用QuickSort(A,pivotPos+1,right);
(3)继续改写QuickSort算法,用栈消去剩下的递归调用。
在下列排序算法中,在待排序的数据表已经为有序时,花费时间反而最多的是()
A.希尔排序
B.堆排序
C.冒泡排序
D.快速排序
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!