C语言中关于选择法的一些问题

选择法是C语言中关于数组元素处理的一种重要方法,利用选择法我们可以从数组中筛选出最大最小项,可以对数组元素进行重排序。对数组元素的处理是在之后处理结构体内数据的一个基础。

筛选最大项:
思路是假定第k个数组元素是最大的,利用for循环让所有数组元素与它依次比较,如果出现第i个数组元素比它大,那么替换为第i个元素继续比较。代码如下:

#include "stdio.h"
int main()
{   int i,k;
    int a[10]={0,7,3,4,8,2,5,9,1};
    for(i=0;i<9;i++)
    printf("[%d] ",i);
    printf("\n");
    for(i=0;i<9;i++)
    printf(" %d  ",a[i]);//输出原始数组相应元素 
    k=1;//假定第k个数组元素是最大的 
    for(i=2;i<9;i++)
        if(a[k]<a[i])k=i; //判断第i个数组元素是否比它大,如果是,那么更换为第i个数组元素继续比较 
    printf("\n\nthe index of maximum is %d",k);
    
    return 0;
}

运行结果如下
在这里插入图片描述

选择法排序
思路与上一问题类似,差异在于要求每一个数组元素位置都排好序并输出,而非只找出一项。
代码如下:

#include "stdio.h"
int main()
{   int i,j,k,m;
    int a[10]={0,7,3,4,8,2,5,9,1};
    printf("the original array is\n");
    for(i=1;i<9;i++)
    printf("[%d] ",i);
    printf("\n");
    for(i=1;i<9;i++)
    printf(" %d  ",a[i]);//输出初始值 

    for(i=1;i<8;i++)//位置循环,目的是让之后的操作历经数组的每个位置 
    {
        k=i;
        for(j=i+1;j<9;j++)//每个位置应该安放什么数,进行完一整个循环就意味着一个位置的元素被确定下来 
            if(a[k]<a[j])k=j;//如果第j个元素比第k个元素值大,那么第j个元素和第k个元素交换位置 
        m=a[i];a[i]=a[k];a[k]=m;
    }
    printf("\n \nthe array after sorted is\n");
    for(i=1;i<9;i++)
    printf(" %d  ",a[i]);//输出排序后的数组 
    
    return 0;
}

运行结果如下:
在这里插入图片描述
选择法对姓名排序
这是对上一个问题的进一步应用,主要是加入了“string.h”库来对字符串进行处理
代码如下:

#include <stdio.h>
#include <string.h>
int main()
{   int i,j,k,m;
    char name[4][15]={"HuaCheng","XieLian","WeiWuxian","LanWangji"};
    char b[15];
    printf("the original names are\n");
    for(i=0;i<4;i++)
    puts(name[i]);
    printf("\n");//输出原始值 
    for(i=0;i<4;i++)//让每个数组位置遍历之后的操作 
    {
        k=i;
        for(j=i+1;j<4;j++)
        {    if(strcmp(name[k],name[j])>0)k=j;//依靠strcmp函数来对第k个名字和第j个名字的字母依次用ASCII码比较,从而判定哪个名字在前 
        strcpy(b,name[i]);
        strcpy(name[i],name[k]);
        strcpy(name[k],b);//这样排序是依strcmp函数判定的名字由大到小排序的 
        } 
    }
    printf("\n \nthe names after sorted are\n");
    for(i=0;i<4;i++)
    printf(" %s  ",name[i]);//输出结果 
    
    return 0;
}

运行结果如下:
在这里插入图片描述

这是一些有关数组处理的问题,主要用到的方法就是选择法,在这一思路上还有很多拓展问题,这一思路在数组处理问题中也是非常常见的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值