C语言之双向冒泡排序

C语言之双向冒泡排序
  • C源码:
//*双向冒泡排序*/

#include <stdio.h>

#define Max_ 11 //设置冒泡排序成员数量

// 打印结果
void Show(int arr[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%d \n ", arr[i]);
}

// 交换数组元素位置
void Swap(int *num_a, int *num_b)
{
    int temp = *num_b;
    *num_b = *num_a;
    *num_a = temp;
}

//改进版的冒泡排序(双向冒泡)
void BidBubbleSort(int array[], int n)
{
    int low, high, flag, i;
    low = 0;
    high = n - 1;
    while (low < high)
    {
        flag = 0;
        for (i = low; i < high; i++) //正向冒泡
        {
            if (array[i] > array[i + 1]) //找到剩下中最大的
            {
                Swap(&array[i], &array[i + 1]);
                flag = 1; //标志, 有数据交换
            }
        }
        if (!flag)
            break;
        // return;
        high--;
        for (i = high; i > low; i--) //反向冒泡
        {
            if (array[i] < array[i - 1]) //找到剩下中最小的
                Swap(&array[i], &array[i - 1]);
        }
        low++;
    }
}

int main()
{ //测试数据
    int arr_test[Max_] = {8, 4, 2, 3, 5, 1, 6, 9, 0, 7, 49};
    //排序前数组序列
    Show(arr_test, Max_);
    BidBubbleSort(arr_test, Max_);
    //排序后数组序列
    Show(arr_test, Max_);
    return 0;
}
  • 运行结果:

C:\Users\Administrator\Desktop\C\main> cd “c:\Users\Administrator\Desktop\C\main” ; if ( ? ) g c c m a i n . c − o m a i n ; i f ( ?) { gcc main.c -o main } ; if ( ?)gccmain.comain;if(?) { .\main }
8 4 2 3 5 1 6 9 0 7 49
0 1 2 3 4 5 6 7 8 9 49

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值