ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7-1-9 交换最小值和最大值 (15 分)

2021-12-26 09:06:02  阅读:134  来源: 互联网

标签:下标 temp int 最大值 交换 最小值 15


交换最大值和最小值

从大一到现在也写了不少题了,也积累了一些经验,形成了自己的一些刷题的风格,也还是一直会出现一些问题,有的问题是因为既有的习惯风格为了让思路清晰、代码较为规整会尽可能的减少变量的使用。
这一题就是这样,总是试图用一个变量去完成一个乃至多个功能,使得代码看起来简洁,但是有时候有些变量必须使用。
这是一道看起来很简单的题,只有一点点的小弯,这个小弯就是下标以及相对应的值的存储和交换,多定义一个变量用来存储交换就好。
#include<stdio.h>
//先让最小值和第一个数交换,再让最大值和第二个数交换
int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i = 0 ; i < n; i++)
    {
        scanf("%d",&a[i]);
    }
    int max = a[0];//变量加初始化一步到位是推荐的,但那是有具体的数据了,要直接拿来用的,在刷题的时候思路不一样对变量进行初始化的值也会有改变,所以做题的时候初始化不初始化都可以,最终目的还是把题给做出来,在做到大而难的题的时候可以写一些注释让自己的思路更清晰,不至于做到一步然后忘了之前的事在干嘛了.
    int min = a[0];
    int temp;
    for(int i = 0; i < n ; i++)
    {
        if(a[min] > a[i])
        {
            min = a[i];
        	temp = i;//此时temp存储的是最小值的下标,可以用来直接进行与第一个值的交换
        }
    }
    a[temp] = a[0];//交换在循环外边确保交换的下标是最小值的下标
    a[0] = min;
    
    for(int i = 0; i < n ; i++)
    {
        if(a[max] < a[i])
        {
            max = a[i];
	        temp = i;//存储的是最大值的下标
        }
    }
    a[temp] = a[0];
    a[n-1] = max;
    
    for(int i = 0; i < n; i++)
        printf("%d ",a[i]);
    return 0;
}

​ 交换最小值之后在交换最大值比较常见的一种思路是先找出来最小值和最大值,然后再分别和第一个元素和最后一个元素进行交换,其中可以分别保存下标和数值。

​ 这样导致的问题就是在进行过最小值和第一个元素的交换之后,最大值的位置可能会发生改变(最大值正好是第一个元素),这样的话之前保存的最大值的下标就失效了,因为最大值的下标随着第一次的交换改变。也没办法再通过之前保存的下标来找到最大值,如果想要知道新的最大值的下标只能再经历一轮新的遍历查找,非常痛苦。

之前我们是查找和交换分开做的,现在将两个步骤同时进行,在找到最小值后就直接进行交换数的交换,由于保存最小值的变量是一个int型变量min没有产生与数组中的下标的联系,所以需要将下标进行存储然后在外循环中通过保存了最小值下标的temp变量进行交换。最大值同理。

标签:下标,temp,int,最大值,交换,最小值,15
来源: https://blog.csdn.net/ahahayaa/article/details/122151656

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有