对对象数组进行排序时,某些对象可能会交换位置。这在时间和空间方面非常昂贵,因为每个交换都需要复制一个对象。
在某些情况下,不需要对整个阵列进行排序。例如:给出一系列马拉松时间。应该对数组进行排序,以便在数组的开头正确排序最快的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类型的另外两个参数,这些参数通过引用传递。当函数完成时,它们将包含函数运行期间的交换次数和数字方法调用。
函数声明是 模板< T类> void quickSort(T *数组,int size, int front,int end,int&电话,int&掉期) 您的功能应基于快速排序算法。因此,您需要编写一个包含递归调用的附加函数。要计算掉期和调用的数量,您应该使用全局变量。
有人可以帮助我吗?
答案 0 :(得分:5)
听起来像是家庭作业。不要将整个对象存储到数组中,而应考虑只存储指向对象的指针。然后排序只移动指针。它会很快。