新手快速上手掌握基础排序<一>
2023-12-31 15:31:53
听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
引言?
从基础的两数交换排序,三四个数排序输出,到学习入门级的排序方法,如冒泡法,选择法,再学习更加快速,便捷的高级排序方法,说明排序是一个很重要的问题,接下来我们就先从基础入门排序方法学习起
一:两数互换排序
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;
}
五:感谢观看,将为你持续更新?
文章来源:https://blog.csdn.net/Miwll/article/details/135315155
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!