练习题005:冒泡排序

C语言练习题目录索引

题目:给定一组数字,使用冒泡排序将其按升序序列排序。

解题思路:冒泡排序利用两个嵌套while循环完成,内层循环每循环一次就将找的的最大数已到最后一个位置,此时这个位置就不用管了,再排序前面的数。
图片来自网络

void swap(int *x, int *y) //交换两数的位置
{
    *x ^= *y;
    *y ^= *x;
    *x ^= *y;
}

void show(int *arr, int len) //打印数组
{
    int i = 0;
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

void bubble_sort(int *arr, int len)
{
    int *start = arr;
    int *end = arr + len - 1;
    while (arr < end)
    {
        int flag = 0; //标识符
        start = arr;  //每次都从第一个元素开始
        while (start < end)
        {
            if (*start > *(start + 1)) 
            {
                flag = 1;
                swap(start, start + 1);
            }

            start++;
        }
        end--; //一趟冒泡后,把最大数放到最后一个位置,接下来只用排序前面的数。

        if (!flag) //如果flag=0,表示这一趟没进行交换操作,此时已经排列好了,直接退出
            return;
    }
}

int main()
{
    int arr[] = { 2, 5, 6, 3, 1, 4, 7, 9, 0, 8 };
    int len = sizeof(arr) / sizeof(arr[0]);

    show(arr, len);
    bubble_sort(arr, len);
    show(arr, len);

    system("pause");
    return 0;
}

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值