quick sort, 第一次试着用templete变小程序
代码
#include <stdio.h>
#include <stdlib.h>
#ifdef _DEBUG
#define DEBUG_NEW new (_NORMAL_BLOCK, THIS_FILE, __LINE__)
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef _DEBUG
#ifndef ASSERT
#define ASSERT assert
#endif
#else // not _DEBUG
#ifndef ASSERT
#define ASSERT
#endif
#endif // _DEBUG
template<typename T>
int _partition(T *A, int p, int r)
{
T x = A[r];
int i = p - 1;
for (int j = p; j <= r - 1; ++j)
{
if (A[j] <= x)
{
i++;
T temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
T temp = A[i + 1];
A[i + 1] = A[r];
A[r] = temp;
return i+1;
}
template<typename T>
void quick_sort(T *A, int p, int r)
{
if (p < r)
{
int q = _partition(A, p, r);
quick_sort(A, p, q - 1);
quick_sort(A, q + 1, r);
}
}
int main()
{
int i;
int N = 20;
double *A = (double *)malloc(sizeof(double) * N);
for (i = 0; i < N; i ++)
{
A[i] = rand() % 100 + 0.25;
printf("%4f\t", A[i]);
}
quick_sort(A, 0, N - 1);
printf("\n--------------\n");
for (i = 0; i != N; i++)
{
printf("%4f\t", A[i]);
}
printf("\n");
free(A);A = NULL;
}
#include <stdlib.h>
#ifdef _DEBUG
#define DEBUG_NEW new (_NORMAL_BLOCK, THIS_FILE, __LINE__)
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef _DEBUG
#ifndef ASSERT
#define ASSERT assert
#endif
#else // not _DEBUG
#ifndef ASSERT
#define ASSERT
#endif
#endif // _DEBUG
template<typename T>
int _partition(T *A, int p, int r)
{
T x = A[r];
int i = p - 1;
for (int j = p; j <= r - 1; ++j)
{
if (A[j] <= x)
{
i++;
T temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
T temp = A[i + 1];
A[i + 1] = A[r];
A[r] = temp;
return i+1;
}
template<typename T>
void quick_sort(T *A, int p, int r)
{
if (p < r)
{
int q = _partition(A, p, r);
quick_sort(A, p, q - 1);
quick_sort(A, q + 1, r);
}
}
int main()
{
int i;
int N = 20;
double *A = (double *)malloc(sizeof(double) * N);
for (i = 0; i < N; i ++)
{
A[i] = rand() % 100 + 0.25;
printf("%4f\t", A[i]);
}
quick_sort(A, 0, N - 1);
printf("\n--------------\n");
for (i = 0; i != N; i++)
{
printf("%4f\t", A[i]);
}
printf("\n");
free(A);A = NULL;
}