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;
}
这就是我们最开始学习的简单的算法,我们接下来会遇到更多的值得学习的算法,一起努力,一起克服!
欢迎大家指正!
1362

被折叠的 条评论
为什么被折叠?



