新手快速上手掌握基础排序<一>

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.基本思想?
  1. 从待排序序列中,找到最小的元素;
  2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
  3. 从余下的 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。