[英]Merge Sort vs Selection Sort
我已经写了这 2 个排序算法,看起来选择排序比合并排序快,这肯定不是吗? 我的测试数据是 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];
当然,在递归的每一步分配一个长度为5000
到50000
的数组会使算法变慢。 尝试重用相同的临时数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.