一道笔试题,求答案

life02 2009-08-06 01:16:34
排序一个数组 [F,a,f,h,A,g,K],要求输出[A,a,F,f,g,h,K]
...全文
467 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnepei 2009-08-12
  • 打赏
  • 举报
回复
#include <iostream>
#include <tchar.h>

using namespace std;

TCHAR szChar[] = {'F', 'a', 'f', 'h', 'A', 'g', 'K'};

int main()
{

int nSize = sizeof(szChar)/sizeof(szChar[0]);

for (int i = 0; i < nSize; i++)
{
int nIdx = i;
TCHAR tVal = szChar[i];
for (int j = 0; j < i; j++)
{
int nVal = (szChar[i] >= 90 ? szChar[i] - 32 : szChar[i]) - (szChar[j] >= 90 ? szChar[j] - 32 : szChar[j]);

if ( nVal<= 0 )
{

nIdx = ((szChar[i] > szChar[j]) && (nVal == 0)) ? j + 1 : j;

for (int m = i; m > nIdx; m--)
{
szChar[m] = szChar[m - 1];
}

break;
}
}

szChar[nIdx] = tVal;
}

for (int i = 0; i < nSize; i++)
{
printf("%C ", szChar[i]);
}

}
UncleQiong 2009-08-10
  • 打赏
  • 举报
回复
我记得很多书上都说,能用标准库的时候,就用标准库,所以应该使用sort吧~
dfkjsdhfks 2009-08-10
  • 打赏
  • 举报
回复
4楼的够简洁,学习。
west_point 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mstlq 的回复:]
C/C++ code#include<iostream>
#include<algorithm>
#include<cctype>usingnamespace std;bool cSmaller(char l,char r)
{return toupper(l)==toupper(r)? r>l : toupper(l)<toupper(r);
};int main ()
{char cs[7]={'F','a','f','h','A','g','K'};
sort(cs,cs+7,cSmaller);for (int i=0;i<7;++i) cout<<""<<cs[i];
cout<<endl;
system("pause");return0;
}

输出
A a F f g h K
请按任意键继续. . .

[/Quote]


顶一个!
Hertz_liu 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mosaic 的回复:]
这个就是按字符升序排,没啥吧。
[/Quote]
不是吧,g,h明显比大K大啊
ArmStronger 2009-08-10
  • 打赏
  • 举报
回复

void mySort()
{
int i,j,min;
char temp;
char cs[7]={'F','a','f','h','A','g','K'};

for (i=0;i<7;i++) //先按ASCII排序,大写字母在前,小写字母在后
{
for(j=i+1;j<7;j++)
{
if (cs[i]>cs[j])
{
temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}
}
}

for (i=0;i<7;i++) //找到第一个小写字母的位置
{
if (cs[i]>=97)
{
min= i;
break;
}
}

while (min<7)//把小写字母插入适当的位置
{
for (i=0;i<min-1;i++)
{
if (cs[min]>=tolower(cs[i]) && cs[min]<tolower(cs[i+1]))
{
temp = cs[min];
for (j=min;j>i+1;j--)
{
cs[j]=cs[j-1];
}
cs[i+1] = temp;
}
}
min++;
}

for (i=0;i<7;++i)
{
cout<<cs[i];
}
cout << endl;
}
扬帆886 2009-08-07
  • 打赏
  • 举报
回复
mark
matrixcl 2009-08-06
  • 打赏
  • 举报
回复

//返回值0、-1、1分别对应 等于 小于 大于
int CmpChar(char ch1, char ch2)
{
assert((ch1>='a' && ch1<='z' || ch1>='A' && ch1<='Z')
&& (ch2>='a' && ch2<='z' || ch2>='A' && ch2<='Z'));
if (ch1 == ch2)
return 0;

if(ch1 >= 'A' && ch1 <= 'Z')
{
if(ch2 >= 'a' && ch2 <= 'z')
ch2 -= 'a' - 'A';
if (ch1 <= ch2) //这里如果ch1 == ch2, 说明ch1和原始的ch2是同一个字母,且ch1为大写,ch2为小写
return -1;
else
return 1;
}
else
{
if(ch2 >= 'A' && ch2 <= 'Z')
ch2 += 'a' - 'A';
if (ch1 >= ch2)
return 1;
else
return -1;
}
}

//一个普通的排序方法
void sort(char * arr, int len)
{
int i, j;
char tmp;
for (i=0; i<len; i++)
{
for (j=i+1; j<len; j++)
{
if (CmpChar(arr[j], arr[i]) < 0)//(arr[j] < arr[i]) 注意这里替换
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}

int main(int argc,char*argv[])
{
char arr[] = {'F','a','f','h','A','g','K'};
int len = sizeof(arr) / sizeof(char);
sort(arr, len);

//OutPut
char *pTmp = new char[len+1];
strncpy(pTmp, arr, len);
pTmp[len] = '\0';
printf(pTmp);
delete [] pTmp;
}

matrixcl 2009-08-06
  • 打赏
  • 举报
回复
自己写个 compare 函数, 然后用正常的排序算法就行了

//返回值0、-1、1分别对应 等于 小于 大于
int CmpChar(char ch1, char ch2)
{
assert((ch1>='a' && ch1<='z' || ch1>='A' && ch1<='Z')
&& (ch2>='a' && ch2<='z' || ch2>='A' && ch2<='Z'));
if (ch1 == ch2)
return 0;

if(ch1 >= 'A' && ch1 <= 'Z')
{
if(ch2 >= 'a' && ch2 <= 'z')
ch2 -= 'a' - 'A';
if (ch1 <= ch2) //这里如果ch1 == ch2, 说明ch1和原始的ch2是同一个字母,且ch1为大写,ch2为小写
return -1;
else
return 1;
}
else
{
if(ch2 >= 'A' && ch2 <= 'Z')
ch2 += 'a' - 'A';
if (ch1 >= ch2)
return 1;
else
return -1;
}
}

//一个普通的排序方法
void sort(char * arr, int len)
{
int i, j;
char tmp;
for (i=0; i<len; i++)
{
for (j=i+1; j<len; j++)
{
if (CmpChar(arr[j], arr[i]) < 0)//(arr[j] < arr[i]) 注意这里替换
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}

int main(int argc,char*argv[])
{
char arr[] = {'F','a','f','h','A','g','K'};
int len = sizeof(arr) / sizeof(char);
sort(arr, len);

//OutPut
char *pTmp = new char[len+1];
strncpy(pTmp, arr, len);
pTmp[len] = '\0';
printf(pTmp);
delete [] pTmp;
}
liuwg9999 2009-08-06
  • 打赏
  • 举报
回复

void insertsort(const char* s,char* d)
{
memset(d,0,strlen(d));
memcpy(d,s,strlen(s));
for(int i=1;i<strlen(s);i++)
{
char tmp=d[i];
int j=i;
for(;j>0&&(tmp>96?tmp-32:tmp)<(d[j-1]>96?d[j-1]-32:d[j-1])?true:((tmp>96?tmp-32:tmp)==(d[j-1]>96?d[j-1]-32:d[j-1])?(tmp<d[j-1]?true:false):false);j--)
{
d[j]=d[j-1];
}
d[j]=tmp;
}
}
zsxcn 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mstlq 的回复:]
C/C++ code#include<iostream>
#include<algorithm>
#include<cctype>usingnamespace std;bool cSmaller(char l,char r)
{return toupper(l)==toupper(r)? r>l : toupper(l)<toupper(r);
};int main ()
{char cs[7]={'F','a','f','h','A','g','K'};
sort(cs,cs+7,cSmaller);for (int i=0;i<7;++i) cout<<""<<cs[i];
cout<<endl;
system("pause");return0;
}

输出
A a F f g h K
请按任意键继续. . .

[/Quote]

mstlq 2009-08-06
  • 打赏
  • 举报
回复
写算法?
那请楼主自己参考快速排序的算法好了^_^
只需将那里的<化作自己的比较逻辑——"不分大小写比较,同一字母则大写在前小写在后"——这样便ok了……

哪里有快速排序源码?
今天还有人发了……
http://topic.csdn.net/u/20090806/13/b810f4b6-7612-49ec-adb1-d1cbbdb37614.html
life02 2009-08-06
  • 打赏
  • 举报
回复
要求写算法,看谁的算法最高效
life02 2009-08-06
  • 打赏
  • 举报
回复
冒泡排序,还不错,还有没有其他的方法?
zhongmengqing 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lijian22500 的回复:]
由小到大排序就行,accii嘛,由小到分别是A,a,F,f,g,h,K
[/Quote]但是小写的ASCII比大写的都大
zhongmengqing 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zhongmengqing 的回复:]
这应该用内排序的算法能够实现吧
[/Quote] 加上区分大小写
zhongmengqing 2009-08-06
  • 打赏
  • 举报
回复
这应该用内排序的算法能够实现吧
mstlq 2009-08-06
  • 打赏
  • 举报
回复
回楼上,楼主的问题不能直接按ascii码来排序的哦^_^
ForestDB 2009-08-06
  • 打赏
  • 举报
回复

// C
int compare(const void * a, const void * b)
{
return *(char *)a - *(char *)b;
}

char a[7] = { F, a, f, h, A, g, K, };
qsort(a, 7, sizeof(char), compare);


// C++
char a[7] = { F, a, f, h, A, g, K, };
sort(a, a + 7);
liuwg9999 2009-08-06
  • 打赏
  • 举报
回复
上边那个写乱了

void sort(const char* s,char* d)
{
memset(d,0,strlen(d));
memcpy(d,s,strlen(s));
while(*d)
{
char*p=d+1;
while(*p)
{
char d1=*d;
if(d1>96)
{
d1=d1-32;
}
char p1=*p;
if(p1>96)
{
p1=p1-32;
}
if(d1>p1)
{
char c=*d;
*d=*p;
*p=c;
}
else if(d1==p1)
{
if(*d>*p)
{
char c=*d;
*d=*p;
*p=c;
}
}
else
{
}
p++;
}
d++;
}
}

加载更多回复(17)
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc 500强公司面试的经典正确与错误回答对比!!! 看看你的弱点.doc C面试题.txt Java初学者都必须知道的六大问题.doc 百度笔试题.txt 北京博彦科技笔试+面试.doc 北京大学计算机科学技术研究所.doc 波尔世通的笔试+面试.doc 测试人员面试题.doc 测试题.doc 常见的测试题(转贴).doc 传视数码公司的面试题.doc 汉端笔试题(7页).doc 合力金桥的笔试题.doc 华为面试题.doc 经典逻辑题.ppt 联合网视面试题.doc 美国英网软件公司题目.doc 面试考题(腾讯,招行等等).txt 某公司的面试试题.doc 奇虎面试题.doc 千像互动的笔试.doc 清华同方开发的面试题 (有兴趣的看一下了 !).doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 软件测试工程师测试试题大集合(二)包括答案.doc 软件测试工程师试题发布版.doc 软件测试试题.doc 软件评测复习知识点(小颖).doc 软通动力面试笔答.doc 瑞星笔试题(15道).doc 神州泰岳测试试题(笔试)转贴.doc 时力科技面试题.doc 瓦瑟笔试题(限男性).doc 喜安科 面试题.doc 性能计算公式.txt 亚控科技比试题.doc 一道测试notepad笔试题.doc 一道数据库的笔试题目.doc 一个外包测试公司的笔试题!.doc 一家通讯公司的面试题目.doc 英文自我介绍大全.doc 英语面试.doc 英语面试题.doc 有意思的逻辑题.doc 中软的面试题(转贴).doc

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧