我有兩種算法。如何確定兩個最快的排序算法?
1.
void sort3(int *mass, int size)
{
int i = 0;
int j = size - 1;
int temp;
int mid = mass[size/2];
do
{
while (mass[i] < mid)
{
i++;
}
while (mass[j] > mid)
{
j--;
}
if (i <= j)
{
temp = mass[i];
mass[i] = mass[j];
mass[j] = temp;
i++;
j--;
}
} while (i <= j);
if (j > 0)
{
sort3(mass, j + 1);
}
if (i < size)
{
sort3(&mass[i], size - i);
}
}
2.
void sort4_prepare(int *mass, int size)
{
int middle, start_left, start_right, last;
int *work_mas = new int[size];
middle = size/2;
start_left = 0;
start_right = middle;
last = size;
for (int j = 0; j < last; j++)
{
if ((start_left < middle) && ((start_right >= last) || (mass[start_left] < mass[start_right])))
{
work_mas[j] = mass[start_left];
start_left++;
}
else
{
work_mas[j] = mass[start_right];
start_right++;
}
}
for (int j = 0; j < last; j++)
mass[j] = work_mas[j];
delete[] work_mas;
};
void sort4(int *mass, int size)
{
if (size > 1)
{
sort4(mass, size/2);
sort4(&mass[size/2], size - size/2);
sort4_prepare(mass, size);
}
}
我也有從最大排序以最小1000張的隨機數的陣列。哪種算法會將數組從最小值到最大值排序得更快?我做了一些測試,我認爲這是第一個,但我不知道如何證明。但是,在某些情況下,第二個將比第一個更快,這使得我在測試中有點不確定。
爲什麼不重複,每次10000次,隨機排列,並測量總時間? – trincot
但仍然有關於此的任何數學證明? – student28
數學不能幫助,因爲每個操作的原子持續時間不知道,並取決於實現(編譯器和處理器)方面。你可以看看確定的時間複雜度,但並不能保證一個算法中會跑的比其他快給定輸入,只有一個會跑得更快,當輸入足夠大(可以* *非常大)。 – trincot