您的位置:首页 > 其它

快速排序 qsort

2007-09-18 22:50 351 查看
还未作详细的分析

/*****************************************
* 文件名: qsort.cpp
* 功能: 实现快速排序并测试
* 创建日期: 2007-9-18
*****************************************/

#include <iostream>
using namespace std;

/****************************************
* 输入参数:A - 要排序的数列
p, r - 对A中p至r的范围内的数
进行排序

****************************************/
template <typename T>
void mqsort(T *A, int p, int r)
{
int q;
if (p < r)
{
q = partition(A, p, r);
mqsort(A, p, q - 1);
mqsort(A, q + 1, r);
}
}

template <typename T>
int partition(T *A, int p, int r)
{
int i, j;
T x = A[r];

i = p - 1;
for (j = p; j < r; j++)
{
if (A[j] <= x)
mswap(A[++i], A[j]);
}

mswap(A[++i], A[r]);
return i;
}

template <typename T>
void mswap(T &a, T &b)
{
T tmp = a;
a = b;
b = tmp;
}

template <typename T>
void display(T *A, int n) /* 传递的仅仅是数组A第一个元素的地址,并不是整个数组 */
{ /* 当用 int len = sizeof(A) / sizeof(A[0]) 求值时就是 1 */
int i;

for (i = 0; i < n; i++)
cout << A[i] << ' ';
}

int main()
{
int A[] = { 2, 1, 32, 12, 4, 11, 21, 15 };
int len = sizeof(A) / sizeof(A[0]);

display(A, len);
cout << endl;

mqsort(A, 0, len - 1);

display(A, len);
cout << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: