码迷,mamicode.com
首页 > 编程语言 > 详细

2016 408算法题目

时间:2019-10-20 14:34:13      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:amp   整数   partition   else   排序   set   i++   cpp   基本   

基本思想:仿照快速排序思想,基于枢轴将n个整数划分处理。

若i=n/2,则分组完成,算法结束

若i<n/2,则枢轴前元素均属于a1,继续对i以后的元素进行划分

若i>n/2,则枢轴之后的元素均属于a2,继续对i以前的元素进行划分

int set_partition(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;
    while(flag)//选择枢轴
    {
        pivotkey=a[0];
        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];

        }
        a[low]=pivotkey;
        if(low==k-1)//如果枢轴是n/2小元素,则划分成功
            flag=0;
        else{
            if(low<k-1)
            {
                low0=++low;
                high=high0;
            }
            else{
                high0=--high;
                low=low0;
            }
        }
    }
    for(i=0;i<k;i++)s1+=a[i];
    for(i=0;i<k;i++)s2+=a[i];
    return s2-s1;
}

  

2016 408算法题目

标签:amp   整数   partition   else   排序   set   i++   cpp   基本   

原文地址:https://www.cnblogs.com/yangmenda/p/11707511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!