gpt4 book ai didi

java - 使用插入排序修改快速排序

转载 作者:行者123 更新时间:2023-12-02 07:51:56 26 4
gpt4 key购买 nike

所以我必须使用枢轴作为数组的中间元素来制作快速排序算法。我做的一切都很好。但现在它要求我修改快速排序算法,以便当任何子列表减少到少于 20 时,我使用插入排序对子列表进行排序。

我似乎已经成功了。它对数组进行了完美的编译和排序,但是我不确定我是否做对了,因为修改后的快速排序和普通快速排序之间的 CPU 时间差异并没有那么不同。我的不确定性在于递归方法 recQuickSortC,其中我有 ">= 20"语句。我不确定这是否是实现修改的正确方法,它可能完全错误,我所知道的是它正确排序。任何帮助都会很好,谢谢。

这是我修改后的快速排序算法:

public void quickSortC(T[] list, int length)
{
recQuickSortC(list, 0, length - 1);
}//end quickSort

private void recQuickSortC(T[] list, int first, int last)
{
if (first < last)
{
int pivotLocation = partitionA(list, first, last);
if ((pivotLocation - 1) >= 20)
recQuickSortC(list, first, pivotLocation - 1);
else
insertionSort(list,pivotLocation -1);

if ((pivotLocation - 1) >= 20)
recQuickSortC(list, pivotLocation + 1, last);
else
insertionSort(list, pivotLocation + 1);
}
}//end recQuickSort

private int partitionA(T[] list, int first, int last)
{
T pivot;

int smallIndex;

swap(list, first, (first + last) / 2);

pivot = list[first];
smallIndex = first;

for (int index = first + 1; index <= last; index++)
{
if (list[index].compareTo(pivot) < 0)
{
smallIndex++;
swap(list, smallIndex, index);
}
}

swap(list, first, smallIndex);

return smallIndex;
}//end partition


public void insertionSort(T[] list, int length)
{
for (int unsortedIndex = 1; unsortedIndex < length;
unsortedIndex++)
{
Comparable<T> compElem =
(Comparable<T>) list[unsortedIndex];

if (compElem.compareTo(list[unsortedIndex - 1]) < 0)
{
T temp = list[unsortedIndex];

int location = unsortedIndex;

do
{
list[location] = list[location - 1];
location--;
}
while (location > 0 &&
temp.compareTo(list[location - 1]) < 0);

list[location] = (T) temp;
}
}
}//end insertionSort

如果您注意到方法旁边有一堆 A、B 和 C,因为我必须执行很多不同的快速排序算法。我输入了算法中使用的所有代码。如果您需要更多,请告诉我,谢谢。

最佳答案

这对我来说看起来非常好,尽管我不会测试枢轴距离是否最多为 20,而是重写快速排序方法来表示 if (last - first <= 20) { do insertion sort} else { do normal quicksort} 。这样,您只需编写一次检查,而不是为递归的每个“边”编写一次。

也就是说,您的基准测试可能实际上并没有给您提供良好的时间估计——也就是说,您的代码实际上可能比您想象的要快——只是因为在 Java 中获得准确的基准测试并不是微不足道或显而易见的.

关于java - 使用插入排序修改快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10133053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com