栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Leetcode题库75. 颜色分类(二路归并 C实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode题库75. 颜色分类(二路归并 C实现)

文章目录
  • 思路
  • 代码

思路

二路归并直接莽 二路归并讲解

代码
//有序数组调整
void Array_Merge(int* head,int low,int high,int* head1,int low1,int high1,int L,int Step_L,int Bool){

    int Temp[((high-low)/Step_L+1)+((high1-low1)/Step_L+1)];
    int i=0,j=low,k=low1;
    if(Bool){
        while(i<((high-low)/Step_L+1)+((high1-low1)/Step_L+1) && (j<=high || k<=high1)){
            if(k>high1){
                Temp[i]=head[j];
                j+=Step_L;
                i++;
                continue;
            }
            if(j>high){
                Temp[i]=head[k];
                k+=Step_L;
                i++;
                continue;
            }
            if(head[j]<=head1[k]){
                Temp[i]=head[j];
                j+=Step_L;
            }
            else{
                Temp[i]=head[k];
                k+=Step_L;
            }
            i++;
        }
    }
    else{
        while(i<((high-low)/Step_L+1)+((high1-low1)/Step_L+1)  && (j<=high || k<=high1)){
            if(k>high1){
                Temp[i]=head[j];
                j+=Step_L;
                i++;
                continue;
            }
            if(j>high){
                Temp[i]=head[k];
                k+=Step_L;
                i++;
                continue;
            }
            if(head[j]>=head1[k]){
                Temp[i]=head[j];
                j+=Step_L;
            }
            else{
                Temp[i]=head[k];
                k+=Step_L;
            }
            i++;
        }
    }
    
    i=0;
    while(i<((high-low)/Step_L+1))
    {
        head[low+i*Step_L]=Temp[i];i++;}
    
    while(i<((high-low)/Step_L+1)+((high1-low1)/Step_L+1))
    {
        head1[low1+(i-((high-low)/Step_L+1))*Step_L]=Temp[i];i++;}
}



//二路归并排序
void Mer_Sort(int* head,int low,int high,int Step_L,int Bool){
    int Shigh=low+(((high-low+1)/Step_L)-1+(((high-low+1)%Step_L)!=0))*Step_L;
    int L=(Shigh-low)/Step_L+1;
    if(L>2){
        Mer_Sort(head,low,low+((L+1)/2-1)*Step_L,Step_L,Bool);
        Mer_Sort(head,low+(((L+1)/2-1)+1)*Step_L,Shigh,Step_L,Bool);
    }
    if(L>1)Array_Merge(head,low,low+((L+1)/2-1)*Step_L,head,low+(((L+1)/2-1)+1)*Step_L,Shigh,L,Step_L,Bool);
}

void sortColors(int* nums, int numsSize){
    Mer_Sort(nums,0,numsSize-1,1,1);
    return nums;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号