У меня быстрая сортировка
и пирамидальная сортировка
запускал c Windows 7 (32bit), Linux (Mint, 32bit). Метод main одинаковый для двух классов. Массив случайных чисел размером 10 млн.
почему быстрая сортировка работает в 5 раз быстрее ?
Может я пирамидальную не правильно написал?
Код:
import java.util.Random;
class Quicksort {
public static void qsort (int items[]) {
qs(items, 0, items.length-1);
}
private static void qs(int a[], int left, int right){
int i=left;
int j=right;
int m = a[(left+right)/2];
do {
while(a[i] < m ) i++;
while(m <a[j]) j--;
if (i<=j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
i++; j--;
}
} while(i<=j);
if(left<j) qs(a, left, j);
if(i<right) qs(a, i, right);
}
public static void main(String[] args) {
int [] a = new int [10000000];
Random rand = new Random ();
for (int i = 0; i < a.length; i++){
a[i] = rand.nextInt(7000);
}
long start = System.nanoTime();
qsort(a);
long time = System.nanoTime() - start;
System.out.println("time = " + ((double)time / Math.pow(10,9)) + " seconds");
}
}
Код:
import java.util.Random;
class Heap {
private static void downHeap(int a[], int k, int n){
int newElem = a[k];
int child;
while (k <= n/2){
child = 2*k;
if (child < n && a[child] < a[child + 1] )
child++;
if (newElem >= a[child]) break;
a[k] = a[child];
k = child;
}
a[k] = newElem;
}
public static void sortHeap(int a[]){
int i = 0;
int temp = 0;
for (i = a.length/2 - 1; i >= 0; i--){
downHeap(a,i,a.length-1);
}
for(i=a.length-1; i > 0; i--){
temp=a[i];
a[i]=a[0];
a[0]=temp;
downHeap(a, 0, i-1);
}
}
public static void main(String[] args) {
int [] a = new int [10000000];
Random rand = new Random ();
for (int i = 0; i < a.length; i++){
a[i] = rand.nextInt(7000);
}
long start = System.nanoTime();
sortHeap(a);
long time = System.nanoTime() - start;
System.out.println("time = " + ((double)time / Math.pow(10,9)) + " seconds");
}
}
Согласно википедии сложность быстрой сортировки в среднем n*logn, пирамидальной - гарантировано n*logn. Вопрос:tessio@tessio-desktop ~ $ javac Heap.java
tessio@tessio-desktop ~ $ java Heap
time = 6.025920925 seconds
tessio@tessio-desktop ~ $ javac Quicksort.java
tessio@tessio-desktop ~ $ java Quicksort
time = 1.246984762 seconds
почему быстрая сортировка работает в 5 раз быстрее ?
Может я пирамидальную не правильно написал?