C语言之双向冒泡排序

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于C语言之双向冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序法

python代码实现鸡尾酒排序(双向冒泡排序)

双向链表排序c语言程序设计

双向链表排序c语言程序设计

数据结构(C语言版) 排序 算法设计Demo2

C语言之冒泡排序