#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define swap(x,y,t) {(t)=(x);(x)=(y);(y)=(t);}
long int v[1000000];
long int L[1000000];
long int R[1000000];
void quickSort(int e[],int n)
{
if(n<=1) return;
int temp;
int L,R;
int pivot = e[0];
int num = 0;
L = 1;
R = n-1;
while(L!=R)
{
while((e[R] > pivot)&&( L < R))
R--;
while((e[L] <= pivot )&&( L < R))
L++;
if( L < R)
{
num++;
swap(e[L],e[R],temp);
}
}
if(e[R] <= pivot)
{
num++;
swap(e[0],e[R],temp);
}
if( num == 0)
{
quickSort( e + 1, n - 1);
return ;
}
quickSort( e , R);
quickSort( e + R +1,n - R - 1);
}
void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r)
{
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
void heapify(int arr[], int n, int i)
{
int temp;
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < n && arr[l] > arr[largest])
largest = l;
if (r < n && arr[r] > arr[largest])
largest = r;
if (largest != i) {
swap(arr[i], arr[largest],temp);
heapify(arr, n, largest);
}
}
void heapSort(int arr[], int n)
{
int temp;
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for (int i = n - 1; i > 0; i--) {
swap(arr[0], arr[i],temp);
heapify(arr, i, 0);
}
}
int main()
{
clock_t start,end;
int i=0;
while( i < 1000000 )
{
if(v[i]==0)
{
continue;
}
i++;
}
quickSort(v,1000000);
double total =((double)(end-start)) / CLOCKS_PER_SEC;
printf("quickSort time:%f\n",total
); mergeSort(v,0,999999);
total =((double)(end-start)) / CLOCKS_PER_SEC;
printf("mergeSort time:%f\n",total
); heapSort(v,1000000);
total =((double)(end-start)) / CLOCKS_PER_SEC;
printf("heapSort time:%f\n",total
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2RlZmluZSBzd2FwKHgseSx0KSB7KHQpPSh4KTsoeCk9KHkpOyh5KT0odCk7fQpsb25nIGludCB2WzEwMDAwMDBdOwpsb25nIGludCBMWzEwMDAwMDBdOwpsb25nIGludCBSWzEwMDAwMDBdOwp2b2lkIHF1aWNrU29ydChpbnQgZVtdLGludCBuKQp7CiAgICBpZihuPD0xKSByZXR1cm47CiAgICBpbnQgdGVtcDsKICAgIGludCBMLFI7CiAgICBpbnQgcGl2b3QgPSBlWzBdOwogICAgaW50IG51bSA9IDA7CiAgICBMID0gMTsKICAgIFIgPSBuLTE7CiAgICB3aGlsZShMIT1SKQogICAgewogICAgICAgIHdoaWxlKChlW1JdID4gcGl2b3QpJiYoIEwgPCBSKSkKICAgICAgICAgICAgUi0tOwogICAgICAgIHdoaWxlKChlW0xdIDw9IHBpdm90ICkmJiggTCA8IFIpKQogICAgICAgICAgICBMKys7CiAgICAgICAgaWYoIEwgPCBSKQogICAgICAgIHsKICAgICAgICAgICAgbnVtKys7CiAgICAgICAgICAgIHN3YXAoZVtMXSxlW1JdLHRlbXApOwogICAgICAgIH0KICAgIH0KICAgICAgICBpZihlW1JdIDw9IHBpdm90KQogICAgICAgIHsKICAgICAgICAgICAgbnVtKys7CiAgICAgICAgICAgIHN3YXAoZVswXSxlW1JdLHRlbXApOwogICAgICAgIH0KICAgICAgICBpZiggbnVtID09IDApCiAgICAgICAgewogICAgICAgICAgICBxdWlja1NvcnQoIGUgKyAxLCBuIC0gMSk7CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIHF1aWNrU29ydCggZSAsIFIpOwogICAgICAgIHF1aWNrU29ydCggZSArIFIgKzEsbiAtIFIgLSAxKTsKCn0Kdm9pZCBtZXJnZShpbnQgYXJyW10sIGludCBsLCBpbnQgbSwgaW50IHIpCnsKICAgIGludCBpLCBqLCBrOwogICAgaW50IG4xID0gbSAtIGwgKyAxOwogICAgaW50IG4yID0gciAtIG07CiAgICBmb3IgKGkgPSAwOyBpIDwgbjE7IGkrKykKICAgICAgICBMW2ldID0gYXJyW2wgKyBpXTsKICAgIGZvciAoaiA9IDA7IGogPCBuMjsgaisrKQogICAgICAgIFJbal0gPSBhcnJbbSArIDEgKyBqXTsKICAgIGkgPSAwOwogICAgayA9IGw7CiAgICB3aGlsZSAoaSA8IG4xICYmIGogPCBuMikgewogICAgICAgIGlmIChMW2ldIDw9IFJbal0pIHsKICAgICAgICAgICAgYXJyW2tdID0gTFtpXTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYXJyW2tdID0gUltqXTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBrKys7CiAgICB9CiAgICB3aGlsZSAoaSA8IG4xKSB7CiAgICAgICAgYXJyW2tdID0gTFtpXTsKICAgICAgICBpKys7CiAgICAgICAgaysrOwogICAgfQogICAgd2hpbGUgKGogPCBuMikgewogICAgICAgIGFycltrXSA9IFJbal07CiAgICAgICAgaisrOwogICAgICAgIGsrKzsKICAgIH0KfQp2b2lkIG1lcmdlU29ydChpbnQgYXJyW10sIGludCBsLCBpbnQgcikKewogICAgaWYgKGwgPCByKSB7CiAgICAgICAgaW50IG0gPSBsICsgKHIgLSBsKSAvIDI7CiAgICAgICAgbWVyZ2VTb3J0KGFyciwgbCwgbSk7CiAgICAgICAgbWVyZ2VTb3J0KGFyciwgbSArIDEsIHIpOwogICAgICAgIG1lcmdlKGFyciwgbCwgbSwgcik7CiAgICB9Cn0Kdm9pZCBoZWFwaWZ5KGludCBhcnJbXSwgaW50IG4sIGludCBpKQp7CiAgICBpbnQgdGVtcDsKICAgIGludCBsYXJnZXN0ID0gaTsKICAgIGludCBsID0gMiAqIGkgKyAxOwogICAgaW50IHIgPSAyICogaSArIDI7CiAgICBpZiAobCA8IG4gJiYgYXJyW2xdID4gYXJyW2xhcmdlc3RdKQogICAgICAgIGxhcmdlc3QgPSBsOwogICAgaWYgKHIgPCBuICYmIGFycltyXSA+IGFycltsYXJnZXN0XSkKICAgICAgICBsYXJnZXN0ID0gcjsKICAgIGlmIChsYXJnZXN0ICE9IGkpIHsKICAgICAgICBzd2FwKGFycltpXSwgYXJyW2xhcmdlc3RdLHRlbXApOwogICAgICAgIGhlYXBpZnkoYXJyLCBuLCBsYXJnZXN0KTsKICAgIH0KfQp2b2lkIGhlYXBTb3J0KGludCBhcnJbXSwgaW50IG4pCnsKICAgIGludCB0ZW1wOwogICAgZm9yIChpbnQgaSA9IG4gLyAyIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgaGVhcGlmeShhcnIsIG4sIGkpOwogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID4gMDsgaS0tKSB7CiAgICAgICAgc3dhcChhcnJbMF0sIGFycltpXSx0ZW1wKTsKICAgICAgICBoZWFwaWZ5KGFyciwgaSwgMCk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgY2xvY2tfdCBzdGFydCxlbmQ7CiAgICBzcmFuZCh0aW1lKE5VTEwpKTsKICAgIGludCBpPTA7Cgl3aGlsZSggaSA8IDEwMDAwMDAgKQoJewoJCXZbaV09cmFuZCgpKnJhbmQoKTsKCQlpZih2W2ldPT0wKQoJCXsKCQkJY29udGludWU7CgkJfQoJCWkrKzsKCX0gCiAgICBzdGFydCA9IGNsb2NrKCk7CiAgICBxdWlja1NvcnQodiwxMDAwMDAwKTsKICAgIGVuZCAgID0gY2xvY2soKTsKICAgIGRvdWJsZSB0b3RhbCA9KChkb3VibGUpKGVuZC1zdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CiAgICBwcmludGYoInF1aWNrU29ydCB0aW1lOiVmXG4iLHRvdGFsKTsKICAgIHN0YXJ0ID0gY2xvY2soKTsKICAgIG1lcmdlU29ydCh2LDAsOTk5OTk5KTsKICAgIGVuZCAgID0gY2xvY2soKTsKICAgIHRvdGFsID0oKGRvdWJsZSkoZW5kLXN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKICAgIHByaW50ZigibWVyZ2VTb3J0IHRpbWU6JWZcbiIsdG90YWwpOwogICAgc3RhcnQgPSBjbG9jaygpOwogICAgaGVhcFNvcnQodiwxMDAwMDAwKTsKICAgIGVuZCAgID0gY2xvY2soKTsKICAgIHRvdGFsID0oKGRvdWJsZSkoZW5kLXN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKICAgIHByaW50ZigiaGVhcFNvcnQgdGltZTolZlxuIix0b3RhbCk7CiAgICByZXR1cm4gMDsKfQ==