C语言—简单冒泡排序

目录

一 什么是冒泡?

 2 使用 输入十个整数 对这组数据进行排序(冒泡)


一 什么是冒泡?

假定我们要对 9 8 7 6 5 4 3 2 1 0 这十个数字进行排序

 2 使用 输入十个整数 对这组数据进行排序(冒泡)

#include<stdio.h>
void bubble_sort(int arr[10], int sz)
//  如果是 int arr 那就是传入一个int 类型的普通变量
// int arr[10] 就是传入一个数组
//这里的arr 本质是指针 指针就是地址
//void bubble_sort(int *arr, int sz)也可以这样写
{
       int i = 0;// 如果在这里使用sizeof(arr)/sizeof(arr[0]) 求元素个数是不行的 因为传过来的是首元素地址 按照32位编译方式 一个指针占四个字节 4/4 = 1;
       for (i = 0; i < sz - 1; i++)// 每一趟都要比较 0 1 2 3 4 5 6 7 8 一共九趟
       {
              int j = 0;
              for (j = 0; j < sz - 1 - i; j++)
              {
                      if (arr[j] > arr[j + 1])//比较一趟的数字
                      {
                             int tmp = arr[j];
                             arr[j] = arr[j + 1];
                             arr[j + 1] = tmp;
                      }
              }
       }
}
int main()
{
       int arr[10] = { 0 };
       int i = 0;
       int sz = sizeof(arr) / sizeof(arr[0]);
       for (i = 0; i< 10; i++)
       {
              scanf("%d", &arr[i]);
       }
       //arr作为数组传参
       //数组传参传的是地址 并且是首元素的地址
       bubble_sort(arr,sz);//arr 是首元素的地址
       for (i = 0; i < 10; i++)
       {
              printf("%d ", arr[i]);
       }
       return 0;
}

 但是我们仔细想想 如果我们在其中某一趟的时候 就已经排好顺序了 但是上面的代码依然还在跑 还在比较 就比较繁琐 所以我们可以改进一下

//还可以改进一下 当已经排好了就不要排了
#include<stdio.h>
void bubble_sort(int arr[10], int sz)
{
       int i = 0;
       for (i = 0; i < sz - 1; i++)
          {
                  int j = 0;
                      int flag = 1;
                      //假设每一趟有序的时候flag = 1
                      for (j = 0; j < sz - 1 - i; j++)
                      {
                             if (arr[j] > arr[j + 1])
                             {
                                    int tmp = arr[j];
                                    arr[j] = arr[j + 1];
                                    arr[j + 1] = tmp;
                                    flag = 0;
                             }
                      }
                      if (1 == flag)
                             break;
              }
       
}
int main()
{
       int arr[10] = { 0 };
       int i = 0;
       int sz = sizeof(arr) / sizeof(arr[0]);
       for (i = 0; i < 10; i++)
       {
              scanf("%d", &arr[i]);
       }
       
       bubble_sort(arr, sz);
       for (i = 0; i < 10; i++)
       {
              printf("%d ", arr[i]);
       }
       return 0;
}

自己第一次接触到的一个很基础的算法 继续加油

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值