C语言冒泡排序-通过创建bubble_sort函数实现。

 一、对数组进行排序,采用函数。

#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
    //确定冒泡排序的趟数
    int i = 0 ;
    for ( i = 0; i < sz-1; i++)
    {
        //每一趟冒泡排序
        int j= 0;
        for ( j = 0; j < sz-1-i; j++)
        //循环递减,每次少i次。
        {
            if(arr[j]>arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
                //采用中间函数进行位置调换。
            }
            //i--; 效率低。
        }
    }
    
}
int main()
{
    int arr[]={9,8,7,6,5,4,3,2,1,0};
    int i =0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    //对arr进行升序排列
    bubble_sort(arr,sz); //冒泡排序函数
    for ( i = 0; i <sz ; i++)
    {
        printf("%d ",arr[i]);
    }
    
    return 0;
}

1,冒泡排序法是通过将一个最大或者最小的数通过在一组数中进行一次次的比较与交换将该数浮到最右边或者最左边的排序方法,通过将两个相邻的元素进行比较,将较大的值交换到右面(左面)。

  2,冒泡排序的设计原理是,对于n个数对其进行排序,总共要进行n-1次排序,每次排序的次数为n-i次,因为每循环一次,内层所需要比较的次数减一,我们可以使用双重循环的方式,外层循环用来控制循环的趟数,内层循环用来控制每一次循环所需要比较的次数。

  3,中间可以定义一个中间变量tmp用来实现两个数的交换。

二、对输入的任意数组进行排列

#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
    //确定冒泡排序的趟数
    int i = 0 ;
    for ( i = 0; i < sz-1; i++)
    {
        //每一趟冒泡排序
        int j= 0;
        for ( j = 0; j < sz-1-i; j++)
        //循环递减,每次少i次。
        {
            if(arr[j]>arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
                //采用中间函数进行位置调换。
            }
            //i--; 效率低。
        }
    }
    
}
int main()
{
    int m = 0;
    int arr[8]={0};
    for ( m = 0; m < 8; m++)
    {
        scanf("%d ",&arr[m]);
    }
    //int arr[]={9,8,7,6,5,4,3,2,1,0};
    int sz = sizeof(arr)/sizeof(arr[0]);
    int j =0;
    //对arr进行升序排列
    bubble_sort(arr,sz); //冒泡排序函数
    for ( j = 0; j <sz ; j++)
    {
        printf("%d ",arr[j]);
    }
    
    return 0;
}

三、增加flag参数进行判断,如果本趟已经有序则跳出循环。


 

#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
    //确定冒泡排序的趟数
    int i = 0 ;
    for ( i = 0; i < sz-1; i++)
    {
        int flag = 1;//假设这一趟已经有序
        //每一趟冒泡排序
        int j= 0;
        for ( j = 0; j < sz-1-i; j++)
        //循环递减,每次少i次。
        {
            if(arr[j]>arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
                //采用中间函数进行位置调换。
                flag = 0; //这一趟其实不完全有序
            }
            //i--; 效率低。
        }
        if (flag==1)
        {
            break;
        }
        
    }
    
}
int main()
{
    int arr[]={9,8,7,6,5,4,3,2,1,0};
    int i =0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    //对arr进行升序排列
    bubble_sort(arr,sz); //冒泡排序函数
    for ( i = 0; i <sz ; i++)
    {
        printf("%d ",arr[i]);
    }
    
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值