Я написал эти 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();
}
}
}
есть ли что-то в моей реализации, влияющее на время, необходимое для завершения сортировки слиянием ???