利用模板封装一个函数mysort(),对不同数据类型的数组进行有由小到大的冒泡排序,并在主函数中用整型数组进行测试并输出结果
可以使用函数模板来封装mysort()函数,以对不同类型的数组进行排序。以下是一个示例实现:
#include <iostream>
using namespace std;
template <typename T>
void mysort(T arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
T temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 1, 4, 2, 8};
int n = sizeof(arr)/sizeof(arr[0]);
mysort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
在这个例子中,我们定义了一个函数模板mysort(),它接受一个泛型数组和数组的大小作为参数。该函数使用冒泡排序算法对数组进行排序,以保证数组中的元素按升序排列。
在主函数中,我们声明了一个整型数组,并使用mysort()函数对其进行排序。最后,我们输出已排序的数组元素,以验证mysort()函数是否按预期工作。
注意,如果要对其他类型的数组进行排序,只需要用该类型的数据类型替换mySort()函数的模板参数T即可。
#include <iostream>
using namespace std;
template<typename T>
void sort1(T 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'};
mysort(a, 5);
mysort(b, 5);
mysort(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 mysort(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;
}
}