迭代法(循环标记法)在数组中的使用

日期 :2023-11-13

一:通过引用交换最小值和最大值问题及选择排序法来解析循环标记法在数组中的使用情况

(1)对于交换最小值和最大值问题:

在实现最小值和第一个数交换最大值和最后一个数交换的情况下,对于输入的一系列不限个数的整数,需要引用数组对于这些元素进行储存并按照输入顺序进行排序。

(2)对于选择排序法:

在实现遍历数组中全部元素,然后将最小值(或最大值)与第一位元素进行交换位置的情况下,并可实现特定次数的交换,对于储存这些元素,引入数组,并对其简单排序,然后在不断地交换位置下实现升序排序(或降序排序)

(3)同时可以通过引用函数,实现简单的插入排序

二:程序设计思路:

程序一:实现最小值和最大值的交换(注意先实现最小值交换后实现最大值交换0)

(1)通过数组导入一系列元素

(2)将数组导入的第一个元素作为标记,同时将其同后面所有元素依次进行比较取其中的最小值。因为要实现数组元素的交换,所以不能直接进行赋值,而是引入变量c,对于c赋值a,再对a赋值b,最后对b赋值c

(3)实现最大值的思路与最小值一样,只是需要注意二者的顺序性,不可对一个数组进行最大值和最小值的同时交换,会导致排序出错。

#include<stdio.h>
int main()
{
    int s[10];
    int a,max,min;
    int temp1,temp2;
    int i,j,k;
    max=0,min=0;
    scanf("%d",&a);
    for(i=0;i<a;i++)
    {
        scanf("%d",&s[i]);
    }
    for(j=0;j<a;j++)
    {
        if(s[j]<s[min])
        {
            min=j;
        }
     }
    temp1=s[0];
    s[0]=s[min];
    s[min]=temp1;
    
    for(k=0;k<a;k++)
    {
        if(s[k]>s[max])
        {
            max=k;
        }
    }
    temp2=s[a-1];
    s[a-1]=s[max];
    s[max]=temp2;
        
    for(i=0;i<a;i++)
    {
        printf("%d ",s[i]);
    }
    return 0;
}

程序二:选择排序法(特定重整次数)

(1)选择排序法的基本思路同循环标记法一致,仍是取首位元素同其他所有数组的元素进行比较实现升序排列,同时可通过输入n次控制循环次数来满足特定重整次数的需求。

(2)选择排序法的特点在于其顺序性,对于依次将最小值同相对第一位数字进行交换的需求,在for内循环中只需for外循环设定的值取其后面的元素中的最小值与之交换,其中也同样应用了abc换数的思路。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n;
    int s[10];
    int i, j, t, temp;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &s[i]);
    }
    for (j = 0; j < n-1; j++)
    {
        t = j;
        for (i = j + 1; i < n; i++)
        {
            if (s[i] > s[t])
            {
                t = i;
            }
        }
        temp = s[t];
        s[t] = s[j];
        s[j] = temp;
    }
    printf("%d",s[0]);
    for (i =1; i < n; i++)
    {
        printf(" %d", s[i]);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值