c语言:三个数排序(if-else实现)

三个数排序

任务描述

编程输入三个整数,按从小到大的顺序输出。

输入示例

1 3 2

输出示例

1 2 3

代码

#include <stdio.h>
int main() {
    int num1, num2, num3;
    
    scanf("%d %d %d", &num1, &num2, &num3);

    if (num1 <= num2 && num1 <= num3) //假设输入第一个数最小
    {
        printf("%d ", num1);
        if (num2 <= num3) 
        {
            printf("%d %d", num2, num3);
        } else
        {
            printf("%d %d", num3, num2);
        }
    } 
    else if (num2 <= num1 && num2 <= num3)//假设输入第二个数最小
    {
        printf("%d ", num2);
        if (num1 <= num3) 
        {
            printf("%d %d", num1, num3);
        } 
        else 
        {
            printf("%d %d", num3, num1);
        }
    } 
    else //假设输入第三个数最小
    {
        printf("%d ", num3);
        if (num1 <= num2) 
        {
            printf("%d %d", num1, num2);
        } 
        else 
        {
            printf("%d %d", num2, num1);
        }
    }
    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用C语言,三取中法来实现快速排序算法的代码: ``` #include <stdio.h> /* 交换两个的位置 */ void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } /* 三取中法选取枢纽元 */ int median(int arr[], int left, int right) { int center = (left + right) / 2; /* 保证 left <= center <= right */ if (arr[left] > arr[center]) swap(&arr[left], &arr[center]); if (arr[left] > arr[right]) swap(&arr[left], &arr[right]); if (arr[center] > arr[right]) swap(&arr[center], &arr[right]); /* 将 center 放到 right - 1 的位置 */ swap(&arr[center], &arr[right - 1]); /* 返回枢纽元的值 */ return arr[right - 1]; } /* 快速排序 */ void quick_sort(int arr[], int left, int right) { if (left < right) { int i = left, j = right - 1; int pivot = median(arr, left, right); /* 选取枢纽元 */ while (1) { /* 从左往右找到第一个大于枢纽元的 */ while (arr[++i] < pivot) {} /* 从右往左找到第一个小于枢纽元的 */ while (arr[--j] > pivot) {} if (i < j) { /* 将左边的与右边的交换 */ swap(&arr[i], &arr[j]); } else { /* 结束循环 */ break; } } /* 将枢纽元与 i 所在位置的交换 */ swap(&arr[i], &arr[right - 1]); /* 对左边的子组进行快速排序 */ quick_sort(arr, left, i - 1); /* 对右边的子组进行快速排序 */ quick_sort(arr, i + 1, right); } } int main() { int arr[] = {6, 2, 5, 4, 3, 1}; int len = sizeof(arr) / sizeof(arr[0]); quick_sort(arr, 0, len - 1); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } ``` 在这个实现中,我们使用了三取中法来选取枢纽元,这可以有效地避免最坏情况的发生,提高快速排序的效率。此外,我们还实现了一个 `swap` 函来交换两个的位置。最后,我们在 `main` 函中定义了一个待排序组,并且调用 `quick_sort` 函对其进行排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值