三数排序 两种方法编写程序,实现对三个整数由小到大排序,并输出。考虑整型、小数、字符等不同类型数的排序。

两种方法编写程序,实现对三个整数由小到大排序,并输出。考虑整型、小数、字符等不同类型数的排序。
方法 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);

img

  • 先看截图【演示了函数模板的三种类型数据排序,另外的定义了方法,自行调用即可】:

img

  • 代码参考如下【冒泡排序,从小到大】:
#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;
    }
}