当前位置: 首页 > news >正文

C语言实现408考研真题2016年43题

#include <iostream>

// 定义分区函数,返回两个子数组之和的差值
int setPartition(int a[], int n)
{
    int pivotkey, low = 0, low0 = 0, high = n - 1, high0 = n - 1, flag = 1, k = n / 2, i;
    int s1 = 0, s2 = 0;
    
    // 当low等于k-1,也就是n/2-1时,分割结束
    while(flag)
    {
        pivotkey = a[low]; // 选择枢轴
        
        // 基于枢轴对数据进行划分
        while (low < high) 
        {
            while (low < high && a[high] >= pivotkey)
                --high;
            if (low != high)
                a[low] = a[high];
            
            while (low < high && a[low] <= pivotkey)
                ++low;
            if (low != high)
                a[high] = a[low];
        } // end of while(low<high)
        
        a[low] = pivotkey; // 把分割值放到对应的位置
        
        // 判断枢轴是否位于目标位置
        if(low == k - 1) // 如果枢轴是第 n/2 小元素,划分成功
        {
            flag = 0;
        }
        else
        {
            if(low < k - 1) // 如果枢轴小于目标位置,则在左侧继续查找
            {
                low0 = ++low; // low0只是做暂存,为下次使用准备,这里我们++low后,low比分割值大1
                high = high0; // 把上次暂存的high0拿过来
            }
            else // 如果枢轴大于目标位置,则在右侧继续查找
            {
                low = low0; // 把上次暂存的low0拿过来
                high0 = --high; // high0只是做暂存,为下次使用准备
            }
        }
    }
    
    // 计算前半部分的总和
    for(i = 0; i < k; i++)
    {
        s1 += a[i];
    }
    
    // 计算后半部分的总和
    for(i = k; i < n; i++)
    {
        s2 += a[i];
    }
    
    // 返回两个子数组之和的差值
    return s2 - s1;
}

int main() {
    int A[10] = { 4,1,12, 18, 7,13, 18, 16,  2, 15 };
    int difference;
    difference = setPartition(A, 10); // 考研初试只需要完成setPartition即可,无需编写这个main函数
    printf("%d\n", difference);
    scanf("%d"); // 这一行用于防止控制台立即关闭,实际用途需根据需求确定
    return 0;
}

http://www.lryc.cn/news/473098.html

相关文章:

  • 2024年,Rust开发语言,现在怎么样了?
  • 三种网络配置方法nmcli、ip、ifcfg文件
  • AES_ECB算法C++与Java相互加解密Demo
  • H7-TOOL自制Flash读写保护算法系列,为兆易创新GD32E23X制作使能和解除算法,支持在线烧录和脱机烧录使用(2024-10-29)
  • FFmpeg 深度教程音视频处理的终极工具
  • Java程序设计:spring boot(13)——全局异常与事务控制
  • 金和OA-C6 ApproveRemindSetExec.aspx XXE漏洞复现(CNVD-2024-40568)
  • Redis集群及Redis存储原理
  • 基于Springboot的图书个性化推荐系统【源码】+【论文】
  • 科普 | 子母钟系统是什么?网络时钟同步的重要性?
  • 批量删除redis数据【亲测可用】
  • Vuestic 数据表格 使用demo
  • 考勤无忧,Zoho People助HR高效
  • 已知一个法向量和一个点,求该平面的ModelCoefficients,并使用ProjectInliers将点云投影到该平面
  • 92.【C语言】数据结构之单向链表的查找,中间插入和删除,销毁
  • WPF+MVVM案例实战(七)- 系统初始化界面字体描边效果实现
  • 基于 C# 的 AI 算法测试方法
  • Find My画框|苹果Find My技术与画框结合,智能防丢,全球定位
  • 布谷语音源码服务器搭建环境及配置流程
  • 算法|牛客网华为机试21-30C++
  • Tomcat servlet response关于中文乱码的经验
  • WebGIS开发丨从入门到进阶,全系列课程分享
  • C++ 模板专题 - 标签分派(Tag Dispatching)
  • 如何解决RabbitMQ消息的重复消费问题
  • Java调用chatgpt
  • 将你的 Kibana Dev Console 请求导出到 Python 和 JavaScript 代码
  • 成都世运会志愿者招募报名流程及证件照制作方法
  • 大数据技术的前景如何?
  • LLM | 论文精读 | 基于大型语言模型的自主代理综述
  • 详解Redis相关缓存问题