c语言设计 输入一串无序的数组,用选择排序法排序。升降都可以。 要求不能给数组设下标,就是说要排序

c语言设计
输入一串无序的数组,用选择排序法排序。升降都可以。
要求不能给数组设下标,就是说要排序的数组可以在键盘上输入任意长度,不能用函数工具获得下标,程序只能用<stdio.h>这个头文件。
数组类型可能是全数字,也可能是字符和数字与符号混合输入。
新手纠结这个问题很久了,望各为大侠看一下这个题有没有解。

这个题目出的却是有点意思,需要先明确否按照单字节排序?如果是单字节,那这个模型就完全变了,char的范围 0 - 255 ,排除部分不可见字符,可见字符明显小于256,
定义int arr[256];
没读取一个字符,以字符的值为下标,更新arr[c] + 1;即所有数据均保存在arr中。
输出的时候根据升序降序,分别从arr 0 下标,及255下标往另一端便利。

快点给分了哦追问

选择排序需要从数组的第二元素与第二一元素比较一直到最后元素与倒数第二元素比较,把值存在第一个元素,然后从第三个元素与第二元素,如此循环,但这都是在名确下标的情况,我试过chara[999];
int b for (b=0;a[b];b++)
这种形式,但输入数组元素只有10时我总不能循环999吧,试了很多办法都不行,即便是纯整数的数组也失败了

可以安%c来输出

追答

你还是没明白我的意思。
你单纯用数组长度去存的话,跟本存不下来的,你无法达到无限的概念,另外你的内存也不允许。
而用我上面的方法,假设你输入10个a,那么arr['a']=10,是个a本身是没有任何区别的,只要你最后输出的时候输出是个a就行,1个int变量就存了是个a字符,同时减小了内存,也解决了数量问题。即使输入100个,1000个a用怎么把arr['a']=XXX就行了。

追问

我明白你的意思了,就是说用Ascll来做下标,比较各元素在码标中的位置然后升降序输出是这意识吗?
能有实例吗?新手业余自学,多多见谅。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-01
用链表呗
第2个回答  2016-06-01
字符符号用ASCII排序吗?追答

就这样理解了,我去试试

#include
int len(char *a){
int l=0;
while(*a){
l++;
a++;
}
return l;
}
void arr(int n,char *a){
int i,j,t;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[j]<a[j+1]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
int main(){
char *a,*b;
int ch,i=0;
a=(char* )malloc(sizeof(char));
b=a;
while((ch=getchar())!='\n'){
*a=ch;
a++;
}
a=b;
arr(len(b),b);
printf("排序后数组为:%s",a);
return 0;
}

排序也可以用指针,不过好麻烦

这个应该可以了

选择排序,好吧,不会,不过你只需要修改一些arr函数的内容就行了

追问

汗😓,你这个涉及的好多,自定义函数,指针,stdio.h函数工具。while循环,fro循环。我只能说我是自学,而且还只学到数组的应用。你这个估计够我看个五六个月了。

你这是冒泡排序吗?

追答

好吧,以为你的意思是不能规定数组长度呢

冒泡

这个程序你现在遇到最大的困难是什么

获取长度还是排序?

刚才看了下选择排序,不是很难

需要的话我只用数组重新写个好了

追问

就是说设计一个程序,输入任意长度的数组然后选择排序,我看的例子都是要没数组赋了初值,或者要求输入下表长度。

追答

#include
int main(){
char a[9999];
int ch,n=0,i,j,t;
while((a[n]=getchar())!='\n')
n++;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(a[j]<a[i]){
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
puts(a);
return 0;
}

这样吗?

意思就是以回车结束了输入

追问

是,但能用选择排序做一下吗?

追答

这就是选择排序啊

把一个比已知顺序数列里面小的元素放到已知顺序数列的后面

追问

哦,新手新手见谅,辛苦了,后面这能看懂了,谢谢

追答

没事

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网