目录
引言
一:两数互换排序
1.画图分析
2.代码实现
二:三数换交换排序
1.例题举例
2.代码实现
3.再比如四数互换排序,也可以使用两数互换的方法来实现 ,但最好使用基础的排序方法(冒泡法,选择法)
三:冒泡法
1.动态图展示
2.基本思想
3.代码实现
4.结果输出
四:选择法
1.动态图展示
2.基本思想
3.代码实现
五:感谢观看,将为你持续更新
听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
引言
从基础的两数交换排序,三四个数排序输出,到学习入门级的排序方法,如冒泡法,选择法,再学习更加快速,便捷的高级排序方法,说明排序是一个很重要的问题,接下来我们就先从基础入门排序方法学习起
一:两数互换排序
1.画图分析
2.代码实现
二:三数换交换排序
在学习两数交换后,三数交换便用两数交换的方法
1.例题举例
如:输入三个整数并按从大到小的顺序输出
输入:1,2,3
输出:3,2,1
如果,a=1,b=2,不符合从大到小的顺序,则交换a,b,此时a是较大的一个数,再与c比较,不符合再互换,b与c比较,不符合互换
2.代码实现
3.再比如四数互换排序,也可以使用两数互换的方法来实现 ,但最好使用基础的排序方法(冒泡法,选择法)
三:冒泡法
1.动态图展示
2.基本思想
遍历比较两个相邻元素的大小,按一个比较规则交换
遍历一轮后,得到一个最大/最小元素 ,在数组最前端/最后端
按第一步遍历余下的(n-1)个元素,直至余下元素个数为1为止,排序结束
通过比较一组数中相邻两个数的大小,来一步步实现排序,每趟排序即可确定一个数的位置
3.代码实现
#include <stdio.h>
#define N 5
int main()
{int a[N]={0};int i=0;for(i=0;i<N;i++){scanf("%d",&a[i]);}int j=0;for(i=0;i<N-1;i++)//趟数{for(j=0;j<N-1-i;j++)//两两元素比较{if(a[j]<a[j+1])//从大到小排序,如果后项比前项大的话,则互换{int t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i<N;i++){printf("%d ",a[i]);}
return 0;
}
4.结果输出
四:选择法
1.动态图展示
2.基本思想
- 从待排序序列中,找到最小的元素;
- 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
- 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
因此我们可以发现,简单选择排序也是通过两层循环实现。
第一层循环:依次遍历序列当中的每一个元素
第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。
3.代码实现
#include<stdio.h>
#define N 5
int main()
{int a[N] = { 0 };int i = 0;for (i = 0; i < N; i++){scanf("%d", &a[i]);}int m = 0, t = 0,j=0;for (i = 0; i < N - 1; i++)//趟数{m = i;//m存储最大值的下标for (j = i + 1; j < N; j++){if (a[m] < a[j]) m = j;//如果a[m]<a[j],则m=j继续存储最大值的下标}if (m != i)//如果此时m存储的最大值下标与i不相等的话,则互换{t = a[m]; a[m] = a[i]; a[i] = t;}}for (i = 0; i < N; i++){printf("%d ", a[i]);}return 0;
}