新手嵌入式学习day5(C基础排序)

 现在假设有5个数,现在要对他进行从小到大的排序

第一轮:
               第一次比较:

12345——>21345

               第二次比较:

21345——>23145

               第三次比较:

23143——>23415

               第四次比较:

23415——>23451

第二轮:

               第一次比较:

23451——>32451

               第二次比较:

32451——>34251

              第三次比较:

34251——>34521

第三轮:

              第一次比较:

34521——>43521

              第二次比较:

43521——>45321

第四轮:

              第一次比较:

45321——>54321

一丶冒泡排序

        过以上比较过程可以得出,如果比较n个数,只需要比较n-1轮即可;而且每轮比较的次数会随着比较轮数的增加而减小,而且轮数和每轮比较次数的和是固定的值,都是比较的个数n。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int arr[5]={5,4,3,2,1};           //定义数组
    for(int m = 0; m < 4;m++)        //设置需要比较的轮数
    {
        for(int n = 0;n<4-m;n++)    //设置每轮需要比较的次数
        {
            if(arr[n]>arr[n+1])
            {
                int i = arr[n];      //设置中间变量,如果前面数大于后面的数就交换
                arr[n]=arr[n+1];
                arr[n+1]=i;
            }
        }
    }
    for(int b = 0;b<5;b++)          //循环遍历打印数组
    printf("%d ",arr[b]);
    return 0;
}

二丶选择排序

    选择排序的思想和冒泡排序几乎一样,只不过选择排序是将最小的值的下标存储起来,然后进行交换

#include <stdio.h> 
int main(int argc, char const *argv[])
{
    int a[5] = {5,4,3,2,1};           //定义数组
    for (int j = 0; j < 5 - 1; j++)       //设置比较轮数
    {
        int k = j;                        //设置存储下标的变量
        for (int i = j + 1; i < 5; i++)   //设置比较次数
        {
            if (a[k] > a[i])              //如果后面的值小于前面的值,则把后面值的下表存储到k中
            {
                k = i;
            }
        }
        if (k != j)                     //如果交换后下表仍等于j,则不需要交换,否则需要交换
        {
            int tem = a[k];
            a[k] = a[j];
            a[j] = tem;
        }
    }
    for (int i = 0; i < 5; i++)         //循环遍历打印数组
    {
        printf("%d ", a[i]);
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值