参考回答:
首先选择一个轴值,小于轴值的元素被放在数组中轴值左侧,大于轴值的元素被放在数组中轴值右侧,这称为数组的一个分割(partition)。快速排序再对轴值左右子数组分别进行类似的操作
选择轴值有多种方法。最简单的方法是使用首或尾元素。但是,如果输入的数组是正序或者逆序时,会将所有元素分到轴值的一边。较好的方法是随机选取轴值
代码:
template <class Elem>
int partition(Elem A[],int i,int j)
{
//这里选择尾元素作为轴值,轴值的选择可以设计为一个函数
//如果选择的轴值不是尾元素,还需将轴值与尾元素交换
int pivot = A[j];
int l = i - 1;
for(int r = i;r < j;r++)
if(A[r] <= pivot)
swap(A,++l,r);
swap(A,++l,j);//将轴值从末尾与++l位置的元素交换
return l;
}
template <class Elem>
void qsort(Elem A[],int i,int j)
{
if(j <= i) return;
int p = partition<Elem>(A,i,j);
qsort<Elem>(A,i,p - 1);
qsort<Elem>(A,p + 1,j);
}
本文向大家介绍请你说一说快速排序,并手写代码相关面试题,主要包含被问及请你说一说快速排序,并手写代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2、快速排序的三个步骤: (1)选择基准:在
本文向大家介绍请你说一下jmeter相关面试题,主要包含被问及请你说一下jmeter时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Jmeter:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Jav
本文向大家介绍请你说一下如何写测试用例相关面试题,主要包含被问及请你说一下如何写测试用例时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础 2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况 3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界
本文向大家介绍请你来手写一下快排的代码相关面试题,主要包含被问及请你来手写一下快排的代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
本文向大家介绍请你说明一下TreeMap的底层实现?相关面试题,主要包含被问及请你说明一下TreeMap的底层实现?时的应答技巧和注意事项,需要的朋友参考一下 考点:集合 TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。 红黑树的插入、删除、遍历时间复杂度都为O(lgN),所以性能上低于哈希表。但是哈希表无法提供键值对的有序输出,红黑
本文向大家介绍请你说一下僵尸进程?相关面试题,主要包含被问及请你说一下僵尸进程?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)正常进程 正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。 当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程