gpt4 book ai didi

java - 合并排序与选择排序

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:32 25 4
gpt4 key购买 nike

我写了这两种排序算法,看起来选择排序比归并排序快,这肯定不是对的吧?我的测试数据是 10 个大小为 5000 到 50000 的随机数组,其中数组中最大可能的数字是 100。

这是我的选择排序实现:

int i, j, iMin;
int n = c.length;

startTime = System.currentTimeMillis();
for (i = 0; i < n - 1; i++) {
iMin = i;
for (j = i + 1; j < n; j++)
if (c[j] < c[iMin]) {
iMin = j;
if (sorting) {
theDelay();
}
}

if (iMin != i) {
swap(c, iMin, i);
if (sorting) {
theDelay();
}
}
}
endTime = System.currentTimeMillis();
overallTime = endTime - startTime;
// System.out.println(overallTime);

theDelay() 方法只是延迟排序算法在其中运行的线程,以便可视化图形可以绘制到 JPanel 以显示正在执行的排序,在此测试用例中它是被忽略所以不会影响我的排序时间。

这是我的合并排序实现:

public void mergeSort(int[] d) throws InterruptedException {
startTime = System.currentTimeMillis();
MergeSort(d, 0, d.length - 1);
endTime = System.currentTimeMillis();
overallTime = endTime - startTime;
//System.out.println("Merge" +overallTime);
}

private void MergeSort(int[] array, int low, int high) throws InterruptedException {
int[] temp = new int[array.length];
if (low < high) {
int middle = low + (high - low) / 2;
MergeSort(array, low, middle);
MergeSort(array, middle + 1, high);
ReMerge(array, temp, low, middle, high);
}
}

private void ReMerge(int[] array2, int[] temp, int low, int middle, int high) throws InterruptedException {
for (int i = low; i <= high; i++) {
temp[i] = array2[i];
}
int i = low;
int j = middle + 1;
int k = low;

while (i <= middle && j <= high) {
if (temp[i] <= temp[j]) {
array2[k] = temp[i];
i++;
if (sorting) {
theDelay();
}
} else {
array2[k] = temp[j];
j++;
if (sorting) {
theDelay();
}
}
k++;
}
while (i <= middle) {
array2[k] = temp[i];
k++;
i++;
if (sorting) {
theDelay();
}
}
}

我的实现中是否有什么东西影响完成合并排序所需的时间???

最佳答案

你有:

private void MergeSort(int[] array, int low, int high) throws InterruptedException
{
int[] temp = new int[array.length];

当然,在递归的每一步分配长度为 500050000 的数组会使算法变慢。尝试重复使用相同的临时数组。

关于java - 合并排序与选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323563/

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