对对象数组进行排序时,某些对象可能会交换位置.这在时间和空间方面非常昂贵,因为每个交换都需要复制对象.
在某些情况下,不需要对整个阵列进行排序.例如:给出一系列马拉松时间.应该对数组进行排序,以便在数组的开头正确排序最快的200次.同样,人们可能对100个最糟糕时期的顺序感兴趣.这里重要的是除了顶部和底部之外的阵列不必排序.
您应该实现的函数不仅将指向模板类的数组的指针和该数组的大小作为参数.它还需要前面和后两个参数.该函数将更改给定数组,以便第一个前元素在整个数组中最小,并且这些前元素已排序.类似地,最高端元素位于数组的末尾,并且这些末端元素也被排序.不必对任何其他元素进行排序.
例如,对于数组["michael","sam","chris","tom","anna","nick","brian","lisa"]和front = 2和end = 3,数组在调用之后功能可能是["anna","brian","michael","lisa","chris","nick","sam","tom"]注意,重要的是前两个名字是"anna"和"brian",以及阵列完成"nick","sam","tom"
最后,该函数将采用另外两个int类型的参数,这些参数通过引用传递.当函数完成时,它们将包含函数运行期间的交换次数和数字方法调用.
函数声明是template <class T> void quickSort(T*array,int size,int front,int end,int&calls,int&swaps)你的函数应该基于quicksort算法.因此,您需要编写一个包含递归调用的附加函数.要计算交换和调用的数量,您应该使用全局变量.
任何人都可以帮助我吗?