C语言基础学习——冒泡排序和选择排序

1.冒泡排序

        我们得先知道这个算法的逻辑顺序,冒泡排序就是两两相邻的数进行比较,如果前者比后者大,那么他们两个交换顺序。这样一轮排序下来,最右边的数,肯定就是最大的数。之后进行比较的时候,就可以忽略上一轮最右边的数,这样循环下来,这个数组就是从小到大排序的。

如果不清楚的话,可以去搜一下冒泡排序的动图。代码如下。

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int n;
	scanf("%d",&n);
	int a[n],temp;
	for (int i = 0; i < n; i++)//这个循环,输入数组内的元素
	{
		scanf("%d",&a[i]);
	}
	// 在排序中,我们先用i控制排序的次数,{3,1,2}三个数进行排序,只需要2次就可以了,也就是说,次数=元素个数-1
	for(int i = 0;i < n-1;i++)
	{
		for(int j = 0;j < n-i-1;j++)//这个循环就是控制相邻元素两两之间的比较
		{							//为什么用n-1-i呢,每一次排序之后
			if(a[j] > a[j+1])		//在进行排序的这些元素当中,是不是最后一个已经是这些元素中最大的了
			{						//所以就可以不进行下一次的循环比较了
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;	//如果前者比后者大,那么他们交换彼此的顺序,保证最后一个元素是这次排序中最大的
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d ",a[i]);		//打印排序后的数组
	}
	putchar(10);
	
	return 0;
}

2. 选择排序

        选择排序的逻辑顺序呢,顾名思义,就是选择一个最小的数,将它放在最前面。那么在程序当中我们怎么进行比较呢?我们可以用一个索引,记录下最小元素的下标,让后面的元素和他比较,如果比他小,那么索引更新,记录新的元素的下标,直到最后比较完了之后,让第一个元素和他进行交换,那么第一个元素就是最小的数字。接下来我们看一下代码

#include<stdio.h>
int main(int argc, char const *argv[]){
    int a[10];
    for(int i = 0;i < 10;i++){  //输入元素
        scanf("%d",&a[i]);
    }
    int min,temp;      //min记录最小元素,temp进行交换
    for(int i = 0;i < 9;i++){   //这里循环的次数和冒泡排序的原理一样,也是元素个数-1
        min = i;        //这里让min记录第一个元素,让后边的元素跟他进行比较
        for(int j = i+1;j < 10;j++){    //因为第一个数已经被min记录了,所以j从下一个元素开始
            if(a[j] < a[min]){
                min = j;    //如果比原先记录的元素要小,那么min更新,记录新的元素的下标
            }
        }
        if(min != i){       //如果m不等于i,那就说明后边有更小的数,进行交换
            temp = a[min];  //如果等于,那么就代表第一个数就是最小的
            a[min] = a[i];
            a[i] = temp;
        }
    }
    for(int i = 0;i < 10;i++){
        i!=9?printf("%d,",a[i]):printf("%d\n",a[i]);
    }

    return 0;
}

这就是我们最开始学习的简单的算法,我们接下来会遇到更多的值得学习的算法,一起努力,一起克服!

欢迎大家指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值