• 关于

    比较计数排序干什么用的

    的搜索结果

问题

十大经典排序算法最强总结(内含代码实现)

1、算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排...
游客pklijor6gytpx 2020-01-09 14:44:55 1240 浏览量 回答数 2

回答

链表啊,结构体里放一个char来记录字母,一个int来计数,遍历字符串后排序输出。 ######谢谢额 我猜自己发现了错误,又改写了一下,现在已经成功了。######我尝试去这样做了,但是结果还是出错。有思路,但是还是比较复杂,代码写出来了出错。也不知道是哪里有问题.######有人能帮帮忙吗?######定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了######回复 @水晶之夜 : 输出的时候类型强制转换下,(char)c[0][0]。估计用指针数组也行,或者也可以用typedef定义一个struct,但这些具体怎么写语句我也不会,没怎么好好用过C,反正大体上应该是这么个意思。######这里有一个问题,你定义的数组是整形的还是字符型?你不可能一个放字符,一个放次数,它们是不同的数据类型。######Hash Table完美解决 ######什么是Hash Table?###### 引用来自“猎户座”的答案 链表啊,结构体里放一个char来记录字母,一个int来计数,遍历字符串后排序输出。 我自己又重新调试了一下,把代码稍稍改了一下。现在基本上可以了。 #define N 1024 void f12() { //输入一串字符以?结束 char str[N]; gets(str); //全部字母小写化 int i; for(i=0;str[i]!='\0';i++) { str[i]=tolower(str[i]); } //定义一个结构体来记录字符和次数 Info a[26]; for(i=0;i<26;i++) { a[i].letter=i+97; a[i].count=0; } //统计字符 for(i=0;str[i]!='\0';i++) { if(str[i]>='a'&&str[i]<='z') { a[str[i]-'a'].count++; } } //排序 int j; for(i=0;i<26;i++) { int k=i; for(j=0;j<25;j++) { if(a[j].count<a[j+1].count) { //交换 int t=a[j].count; a[j].count=a[j+1].count; a[j+1].count=t; char c = a[j].letter; a[j].letter=a[j+1].letter; a[j+1].letter=c; } } } //输出 for(i=0;i<26;i++) { if(a[i].count==0) continue; printf("%c %d\n",a[i].letter,a[i].count); } } ###### 引用来自“NealFeng”的答案 定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接 int alpha[26]; void init_alpha(void){ int i; for (i = 0 ; i < 26 ; i ++ ) alpha[i] = 0; } #define _CHK_SET(a,min,max) do {if((a >= (min))&&(a <= (max))){alpha[a-min] += 1;}while (0) void set_alpha(char a){ _CHK_SET(a ,'A','Z'); _CHK_SET(a,'a','z'); } int max_num(void){ int re = alpha[0]; int i; for (i = 1 ; i< 26 ; i++) { if (alpha[i] > re) re = alpha[i]; } return re; } int print_max(void){ int i; int flag = 0; i = max_num(); if (alpha[i] == 0){ return 0; } printf(....); alpha[i] = 0; return 1; } 余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0. 哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。 ######有一点挺有意思的,确实,要求是打印出来,干嘛排序呢?###### 引用来自“中山野鬼”的答案 引用来自“NealFeng”的答案 定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接 int alpha[26]; void init_alpha(void){ int i; for (i = 0 ; i < 26 ; i ++ ) alpha[i] = 0; } #define _CHK_SET(a,min,max) do {if((a >= (min))&&(a <= (max))){alpha[a-min] += 1;}while (0) void set_alpha(char a){ _CHK_SET(a ,'A','Z'); _CHK_SET(a,'a','z'); } int max_num(void){ int re = alpha[0]; int i; for (i = 1 ; i< 26 ; i++) { if (alpha[i] > re) re = alpha[i]; } return re; } int print_max(void){ int i; int flag = 0; i = max_num(); if (alpha[i] == 0){ return 0; } printf(....); alpha[i] = 0; return 1; } 余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0. 哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。 我测试了你一下你这个代码,还有5个错误。不太理解。。 --------------------Configuration: temp - Win32 Debug-------------------- Compiling... temp.cpp d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{' d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha' d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found Error executing cl.exe. temp.obj - 5 error(s), 0 warning(s) ###### 引用来自“中山野鬼”的答案 引用来自“NealFeng”的答案 定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接 int alpha[26]; void init_alpha(void){ int i; for (i = 0 ; i < 26 ; i ++ ) alpha[i] = 0; } #define _CHK_SET(a,min,max) do {if((a >= (min))&&(a <= (max))){alpha[a-min] += 1;}while (0) void set_alpha(char a){ _CHK_SET(a ,'A','Z'); _CHK_SET(a,'a','z'); } int max_num(void){ int re = alpha[0]; int i; for (i = 1 ; i< 26 ; i++) { if (alpha[i] > re) re = alpha[i]; } return re; } int print_max(void){ int i; int flag = 0; i = max_num(); if (alpha[i] == 0){ return 0; } printf(....); alpha[i] = 0; return 1; } 余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0. 哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。 简洁、明了 ###### 引用来自“水晶之夜”的答案 引用来自“中山野鬼”的答案 引用来自“NealFeng”的答案 定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接 int alpha[26]; void init_alpha(void){ int i; for (i = 0 ; i < 26 ; i ++ ) alpha[i] = 0; } #define _CHK_SET(a,min,max) do {if((a >= (min))&&(a <= (max))){alpha[a-min] += 1;}while (0) void set_alpha(char a){ _CHK_SET(a ,'A','Z'); _CHK_SET(a,'a','z'); } int max_num(void){ int re = alpha[0]; int i; for (i = 1 ; i< 26 ; i++) { if (alpha[i] > re) re = alpha[i]; } return re; } int print_max(void){ int i; int flag = 0; i = max_num(); if (alpha[i] == 0){ return 0; } printf(....); alpha[i] = 0; return 1; } 余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0. 哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。 我测试了你一下你这个代码,还有5个错误。不太理解。。 --------------------Configuration: temp - Win32 Debug-------------------- Compiling... temp.cpp d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{' d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha' d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found Error executing cl.exe. temp.obj - 5 error(s), 0 warning(s) 他这个是 C语言写的,得用 C语言编译器。 把 .cpp 改成 .c 再试试。 还有 27 行 printf 里面加上你要输出的东西。 ###### 引用来自“水晶之夜”的答案 引用来自“中山野鬼”的答案 引用来自“NealFeng”的答案 定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接 int alpha[26]; void init_alpha(void){ int i; for (i = 0 ; i < 26 ; i ++ ) alpha[i] = 0; } #define _CHK_SET(a,min,max) do {if((a >= (min))&&(a <= (max))){alpha[a-min] += 1;}while (0) void set_alpha(char a){ _CHK_SET(a ,'A','Z'); _CHK_SET(a,'a','z'); } int max_num(void){ int re = alpha[0]; int i; for (i = 1 ; i< 26 ; i++) { if (alpha[i] > re) re = alpha[i]; } return re; } int print_max(void){ int i; int flag = 0; i = max_num(); if (alpha[i] == 0){ return 0; } printf(....); alpha[i] = 0; return 1; } 余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0. 哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。 我测试了你一下你这个代码,还有5个错误。不太理解。。 --------------------Configuration: temp - Win32 Debug-------------------- Compiling... temp.cpp d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{' d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha' d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found Error executing cl.exe. temp.obj - 5 error(s), 0 warning(s) 这个也算代码?我的老天啊。。。无非是我想说明逻辑,用了语言来描述。。。。不能这么省事。又不是我的作业。哈。
爱吃鱼的程序员 2020-06-03 17:27:32 0 浏览量 回答数 0

问题

【精品问答】python技术1000问(1)

为了方便python开发者快速找到相关技术问题和答案,开发者社区策划了python技术1000问内容,包含最基础的如何学python、实践中遇到的技术问题、python面试等维度内容。 我们会以每天至少50条的...
问问小秘 2019-12-01 21:57:48 456417 浏览量 回答数 22

问题

这几道经典例题帮你轻松搞透贪心算法 6月17日 【今日算法】

贪心算法概念叙述 运用贪心算法求解问题时,会将问题分为若干个子问题,可以将其想象成俄罗斯套娃,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是该算法不会直接从整体考虑问题&#...
游客ih62co2qqq5ww 2020-06-18 15:46:11 1 浏览量 回答数 1

问题

Java技术1000问(3)【精品问答】

为了方便Java开发者快速找到相关技术问题和答案,开发者社区策划了Java技术1000问内容,包含最基础的Java语言概述、数据类型和运算符、面向对象等维度内容。 我们会以每天至少50条的速度,增...
问问小秘 2020-06-02 14:27:10 11463 浏览量 回答数 3

问题

【精品问答】Python二级考试题库

1.关于数据的存储结构,以下选项描述正确的是( D ) A: 数据所占的存储空间量 B: 存储在外存中的数据 C: 数据在计算机中的顺序存储方式 D: 数据的逻辑结构在计算机中的表示 2.关于线性...
珍宝珠 2019-12-01 22:03:38 7177 浏览量 回答数 3

问题

【精品问答】python技术1000问(2)

为了方便python开发者快速找到相关技术问题和答案,开发者社区策划了python技术1000问内容,包含最基础的如何学python、实践中遇到的技术问题、python面试等维度内容。 我们会以每天至少50条的...
问问小秘 2019-12-01 22:03:02 3129 浏览量 回答数 1

问题

【精品问答】110+数据挖掘面试题集合

数据挖掘工程师面试宝典双手呈上,快来收藏吧! 1.异常值是指什么?请列举1种识别连续型变量异常值的方法? 2.什么是聚类分析? 3.聚类算法有哪几种?选择一种详细描述其计算原理和步骤。 4.根据要求写出SQL ...
珍宝珠 2019-12-01 21:56:45 2713 浏览量 回答数 3

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务