上代码,呵呵…
#ifndef __QSORT_H
#define __QSORT_H
#define CUTOFF (3)
typedef int ELEMENTSTYPE;
void QSort(ELEMENTSTYPE A[], int left, int right);
void InsertSort(ELEMENTSTYPE A[], int N);
#endif
#include
#include"QSort.h"
void Swap(ELEMENTSTYPE& a, ELEMENTSTYPE &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void InsertSort(ELEMENTSTYPE A[], int N)
{
ELEMENTSTYPE tmp;
int i = 0, j = 0;
for(i = 1; i < N; ++i)
{
tmp = A[i];
for(j = i; j > 0 && tmp < A[j - 1]; --j)
A[j] = A[j - 1];
A[j] = tmp;
}
}
ELEMENTSTYPE median3(ELEMENTSTYPE A[], int left, int right)
{
int center = (left + right) >> 1;
if(A[left] > A[center])
{
Swap(A[left], A[center]);
}
if(A[left] > A[right])
{
Swap(A[left], A[right]);
}
if(A[center] > A[right])
{
Swap(A[center], A[right]);
}
Swap(A[center], A[right - 1]);
return A[right - 1];
}
void QSort(ELEMENTSTYPE A[], int left, int right)
{
if(left + CUTOFF <= right)
{
int i = left, j = right - 1;
ELEMENTSTYPE tmp = median3(A, left, right);
for(;;)
{
while(A[++i] < tmp);
while(A[--j] > tmp);
if(i > j)
break;
Swap(A[i], A[j]);
}
Swap(A[i], A[right - 1]);
QSort(A, left, i - 1);
QSort(A, i + 1, right);
}
else
{
InsertSort(A + left, right - left + 1);
}
}