两种方法编写程序,实现对三个整数由小到大排序,并输出。考虑整型、小数、字符等不同类型数的排序。
方法 1 函数原型:void sort(int a[], int len);
void sort(double a[], int len);
void sort(char a[], int len);
方法 2 函数模板原型:
template
void sort(T a[], int len);
#include <iostream>
using namespace std;
template<typename T>
void sort1(T a[], int len);
void sort(int a[], int len);
void sort(double a[], int len);
void sort(char a[], int len);
int main()
{
int i;
int a[5] = {3, 5, 2, 4, 1};
double b[5] = {4.2, 7.4, 3.4, 2.3, 5.4};
char c[5] = {'c', 'a', 'g', 'e', 'd'};
sort1(a, 5);
sort1(b, 5);
sort1(c, 5);
for(i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
for(i = 0; i < 5; i++)
{
printf("%.2lf ", b[i]);
}
printf("\n");
for(i = 0; i < 5; i++)
{
printf("%c ", c[i]);
}
return 0;
}
template<typename T>
void sort1(T a[], int len)
{
int i, j;
T t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}
void sort(int a[], int len)
{
int i, j, t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}
void sort(double a[], int len)
{
int i, j;
double t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}
void sort(char a[], int len)
{
int i, j;
char t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}