一道笔试题,求答案

life02 2009-08-06 01:16:34
排序一个数组 [F,a,f,h,A,g,K],要求输出[A,a,F,f,g,h,K]
...全文
473 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题库 C语言终极面试宝典.doc Java笔试题目汇总.pdf Java面试宝典_2010.doc 面试全攻略100题.doc 智力题和答案.doc C语言面试题大汇总.doc 计算机专业必备笔试面试锦囊.doc 笔试.rar 面试题集合.zip C语言面试题大汇总1.doc 面试题集合 java面试题 JAVA面试题集合(项目2部).chm 华为笔试题大全(史上最齐全).doc JAVA题库.doc java面试题.zip Java面试宝典2011版-1A,Java基础部分.doc jsp笔试题全集.doc Java学习笔记(必看经典).doc android和java面试大全.rar JAVA精华.doc JAVA经典算法50题1.doc Android笔试题库.rar Java面试宝典2011版-1B,Java基础部分.doc Java工程师试题(机构招聘)20100526.doc C语言面试题大汇总面试题及答案.doc Java23种设计模式(总结)1.doc JAVA_WEB面试笔试题.doc 实施人员初试题20091009.doc 笔试智力题.doc C语言面试题.doc 2011android面试题目及其答案大全.doc java基础笔试题.doc 安卓鄙视题附答案.txt 史上最全的android面试题库.docx android工程师笔试试卷.doc Android面试题(详细答案).doc Android内测题.doc Java面试题2.doc JAVA面试题80页.doc 智力题.doc JAVA 综合面试题.pdf 分类后的葵花宝典 葵花宝典.doc 九阴真经.doc Java面试题1.doc 葵花宝典-数据库类.doc JAVA面试题集锦.doc Java程序员,面试必读.txt 软通动力招聘测试题.doc java面试葵花宝典.doc 新建 文本文档 (2).txt 125条常见的JAVA面试题.doc NET易筋经.doc 葵花宝典-Java Web类.doc 葵花宝典-基础类.doc 葵花宝典-数据库类1.doc 技术测评java.doc 技术测评.net.doc 瑞星笔试题(15道).doc 汉端笔试题(7页).doc 一道测试notepad笔试题.doc 奇虎面试题.doc 喜安科 面试题.doc 北京博彦科技笔试+面试.doc 清华同方开发的面试题 (有兴趣的看一下了 !) 中软的面试题(转贴).doc 亚控科技比试题.doc 神州泰岳测试试题(笔试)转贴.doc 一家通讯公司的面试题目.doc 软件测试工程师试题发布版.doc 某公司的面试试题.doc 一个外包测试公司的笔试题!.doc 时力科技面试题.doc 合力金桥的笔试题.doc 一道数据库的笔试题目.doc 传视数码公司的面试题.doc 美国英网软件公司题目.doc 软件测试工程师测试试题大集合(二)包括答案.d 波尔世通的笔试+面试.doc 瓦瑟笔试题(限男性).doc 软通动力面试笔答.doc 常见的测试题(转贴).doc 北京大学计算机科学技术研究所.doc 联合网视面试题.doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 千像互动的笔试.doc 2012java面试题分析大全.doc JAVA面试题集合(项目2部).chm JAVA经典算法50题1.doc Java工程师试题(机构招聘)20100526.doc Java23种设计模式(总结)1.doc 实施人员初试题20091009.doc 框架图.png struts面试题 hibernate面试题 三大框架.txt JAVA题库.doc

65,186

社区成员

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

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