给定一个字符数组,存储有R、G、B字符,将所有字符按照RGB顺序排序

这个题目隐约是在某个博客上看到过,后来书签掉了,一直找不到原文,所以只好自己写了一个解法,但愿没有出错。

题目描述

已知一个字符数组,其中存储有R、G、B字符,要求将所有的字符按照RGB的顺序进行排序。比如给定一个数组为char s[] = "RGBBRGGBGB",则排序后应该为RRGGGGBBBB。

 

分析

解法1)这个题目有点类似于快速排序中用到的划分数组的方法,但是这里有三个字符,因此需要调用划分方法两次,第一次以'B' 划分,第二次以'G'划分,这样两次划分后就可以将原来的字符数组划分成RGB顺序。这个方法比较自然,容易想到,代码如下。这个方法的缺点是需要遍历两遍数组。

/*划分函数*/
void partition(char *a, int lo, int hi, char t)
{
    int m = lo-1;
    for (int i=lo; i<=hi; i++) {
        if (a[i] != t) {
            swap(a, ++m, i);
        }
    }
}

/*主函数*/
void sort(char *a)
{ 
    int len = strlen(a);
    partition(a, 0, len-1, 'G');  //以G划分
    partition(a, 0, len-1, 'B');  //以B划分
}


解法2)其实还有一个只需要遍历一遍数组的方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在MATLAB中,模板匹配是一种常用的图像处理技术,用于在一张大图(搜索图像)中寻找与给定小图(模板图像)相似的位置。它主要用于简单的物体定位,尤其是在计算机视觉和机器学习领域。 模板匹配的基本步骤包括: 1. 准备模板:选择一个小图像,通常是感兴趣的目标区域,将其转换为灰度图像,以便于比较。 2. 在搜索图像上应用模板:将搜索图像也转换为灰度,并使用`imfilter`或`imcorr`等函数进行卷积操作,寻找与模板最相似的部分。 3. 检测匹配区域:找到卷积结果中的峰值,这些峰值对应于模板可能的位置。 4. 可视化结果:显示搜索图像及其匹配区域,以便于评估结果。 以下是一个简单的模板匹配代码示例: ```matlab % 假设template是模板图像,searchImg是搜索图像 template = imread('template.jpg'); % 读取模板 searchImg = imread('searchImage.jpg'); % 读取搜索图像 % 转换为灰度图像 template_gray = rgb2gray(template); searchImg_gray = rgb2gray(searchImg); % 使用imcorr函数进行模板匹配 response = imcorr(searchImg_gray, template_gray); % 找到最大响应的位置,即匹配区域 [matchY, matchX] = max(response(:)); matchPos = [matchX searchImg_size(1) - matchY]; % 注意Y轴方向的索引反向 % 在搜索图像上标记匹配区域 result = insertObjectAnnotation(searchImg, 'rectangle', matchPos, template, 'Color', 'red'); % 显示结果 imshowpair(searchImg, result, 'montage'); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值