gpt4 book ai didi

java - 为什么我的快速排序这么慢?

转载 作者:行者123 更新时间:2023-12-01 17:34:21 30 4
gpt4 key购买 nike

作为面试准备的一部分,我正在练习编写排序算法,我想知道是否有人可以帮助我找出为什么这种快速排序不是很快?它似乎具有正确的运行时复杂性,但它比我的合并排序慢大约 2 的常数因子。我也很感激任何可以改进我的代码但不一定回答问题的评论。

非常感谢您的帮助!如果我犯了任何礼仪错误,请随时告诉我。这是我的第一个问题。

private class QuickSort implements Sort {

@Override
public int[] sortItems(int[] ts) {
List<Integer> toSort = new ArrayList<Integer>();
for (int i : ts) {
toSort.add(i);
}
toSort = partition(toSort);
int[] ret = new int[ts.length];
for (int i = 0; i < toSort.size(); i++) {
ret[i] = toSort.get(i);
}
return ret;
}

private List<Integer> partition(List<Integer> toSort) {
if (toSort.size() <= 1)
return toSort;
int pivotIndex = myRandom.nextInt(toSort.size());
Integer pivot = toSort.get(pivotIndex);
toSort.remove(pivotIndex);
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
for (int i : toSort) {
if (i > pivot)
right.add(i);
else
left.add(i);
}
left = partition(left);
right = partition(right);
left.add(pivot);
left.addAll(right);
return left;
}

}

非常感谢所有提供帮助的人!

这是我为后代改进的类(class):

private class QuickSort implements Sort {

@Override
public int[] sortItems(int[] ts) {
int[] ret = ts.clone();
partition(ret,0,ret.length);
return ret;
}

private void partition(int[] toSort,int start,int end) {
if(end-start<1) return;
int pivotIndex = start+myRandom.nextInt(end-start);
int pivot = toSort[pivotIndex];
int curSorted = start;
swap(toSort,pivotIndex,start);
for(int j = start+1; j < end; j++) {
if(toSort[j]<pivot) {
if(j!=curSorted+1)
swap(toSort,curSorted,curSorted+1);
swap(toSort,j,curSorted++);
}
}
// Now pivot is at curSorted
partition(toSort,start,curSorted);
partition(toSort,curSorted+1,end);
}
}

最佳答案

快速排序的最大优点之一是它可以作为就地算法实现。不要创建新列表,而是就地对元素进行排序。

关于java - 为什么我的快速排序这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4573408/

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