听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
从基础的两数交换排序,三四个数排序输出,到学习入门级的排序方法,如冒泡法,选择法,再学习更加快速,便捷的高级排序方法,说明排序是一个很重要的问题,接下来我们就先从基础入门排序方法学习起
在学习两数交换后,三数交换便用两数交换的方法
如:输入三个整数并按从大到小的顺序输出
输入:1,2,3
输出:3,2,1
如果,a=1,b=2,不符合从大到小的顺序,则交换a,b,此时a是较大的一个数,再与c比较,不符合再互换,b与c比较,不符合互换
遍历比较两个相邻元素的大小,按一个比较规则交换
遍历一轮后,得到一个最大/最小元素 ,在数组最前端/最后端
按第一步遍历余下的(n-1)个元素,直至余下元素个数为1为止,排序结束
通过比较一组数中相邻两个数的大小,来一步步实现排序,每趟排序即可确定一个数的位置
#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;
}
因此我们可以发现,简单选择排序也是通过两层循环实现。
第一层循环:依次遍历序列当中的每一个元素
第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。
#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;
}