题目

1.选择法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。
2.冒泡法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从小到大排序后输出。试编写相应程序。

分析

选择排序

选择排序法的步骤如下:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。

冒泡排序

冒泡排序法的步骤如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

了解了原理,那么就好办了:

示例代码

选择排序,从大到小

#include <stdio.h>

void num_sort(int *ip, int n);
int main(void)
{
    int n;
    printf("Please enter an integer N (1-10):");
    scanf("%d", &n);
    if (n < 1 || n > 10) {
        printf("ERROR!\n");
        return -1;
    }
    //定义并初始化数组及其指针
    int num[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int *ip = num;
    //输入数据进入数组
    for (int i = 0; i < n; i++) {
        printf("Please enter the %dth number(0-9999):", i + 1);
        scanf("%d", &num[i]);
        if (num[i] < 0 || num[i] > 9999) {
            printf("ERROR!\n");
            return -1;
        }
    }
    //排序
    num_sort(ip, n);
    //输出结果
    printf("\n\n============================================\n");
    printf("The sorting result is:");
    for (int i = 0; i < n; i++) {
        printf("%d ", num[i]);
    }
    printf("\n");
    getchar();
    return 0;
}

//选择排序:从大到小
void num_sort(int *ip, int n)
{
    int temp;
    for (int i = 0, max = 0; i < n; i++, max = 0) {
        //取数组中的最大数
        for (int j = i; j < n; j++) {
            if (max < ip[j]) {
                max = ip[j];
            }
        }
        //找到最大数,并将其提前
        for (int j = i; j < n; j++) {
            if (max == ip[j]) {
                temp = ip[i];
                ip[i] = ip[j];
                ip[j] = temp;
            }
        }
    }
}

冒泡排序,从小到大

#include <stdio.h>

void num_sort(int *ip, int n);
int main(void)
{
    int n;
    printf("Please enter an integer N (1-10):");
    scanf("%d", &n);
    if (n < 1 || n > 10) {
        printf("ERROR!\n");
        return -1;
    }
    //定义并初始化数组及其指针
    int num[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int *ip = num;
    //输入数据进入数组
    for (int i = 0; i < n; i++) {
        printf("Please enter the %dth number(0-9999):", i + 1);
        scanf("%d", &num[i]);
        if (num[i] < 0 || num[i] > 9999) {
            printf("ERROR!\n");
            return -1;
        }
    }
    //排序
    num_sort(ip, n);
    //输出结果
    printf("\n\n============================================\n");
    printf("The sorting result is:");
    for (int i = 0; i < n; i++) {
        printf("%d ", num[i]);
    }
    printf("\n");
    getchar();
    return 0;
}

//冒泡排序:从小到大
void num_sort(int *ip, int n)
{
    int temp;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            //交换相邻的两个数
            if (ip[j] > ip[j + 1]) {
                temp = ip[j];
                ip[j] = ip[j + 1];
                ip[j + 1] = temp;
            }
        }
    }
}

以上两个程序的区别仅在函数num_sort()

原文地址:http://www.cnblogs.com/CoronaZero/p/16794562.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性