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

算法-美团2015校招笔试:写一个复杂度为n的排序算法

时间:2015-07-29 06:52:45      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

一组随机排序的字母数字。请编写一个时间复杂度为O(n)的算法,使这些字母从小到大顺序排序。
说明:字母区分大小写,相同的字母,排序护小写排在前面。
例如:R,B,B,b,W,W,B,R,B,w
排序为:b,B,B,B,B,R,R,w,W,W

#include <stdio.h>
#include <string.h>
void getHelper();
int main() {
	char str[100];
	int helper[150]={0};
	int i,j;
	gets(str);
	getHelper(str, helper);//复杂度为O(n)
	for(i = ‘a‘; i <=‘z‘ ; i++) {//复杂度接近为O(1)
		if(helper[i] > 0) {
			for(j= 0;j < helper[i] ; j++){
				printf("%c",i);
			}
			helper[i] = 0;
			if(helper[i-32] >0) {
				for(j= 0;j < helper[i-32] ; j++){
					printf("%c",i-32);
				}
			}
			helper[i-32] = 0;
		}else if(helper[i-32] > 0){
			for(j= 0;j < helper[i-32] ; j++){
					printf("%c",i-32);
				}
		}
	}
	return 0;
}
void getHelper(char *p,int helper[]){
	int i, len;
	len = strlen(p);
	for (i = 0; i < len; i++) {
		helper[p[i]]++; /*将当前字符所对应的ASCII码作为helper数组的下标,同时加1*/
	}
	
	
}

今天太晚了,先贴出来代码,明天我再做解释,大致看了一下,这个算法的应该为O(n),明天再说吧。明天再看看

算法-美团2015校招笔试:写一个复杂度为n的排序算法

标签:

原文地址:http://my.oschina.net/ccqy66/blog/484949

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