| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1828 人关注过本帖
标题:请问一下关于这一段排序去重的代码哪里出了问题
只看楼主 加入收藏
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
结帖率:96.88%
收藏
已结贴  问题点数:20 回复次数:8 
请问一下关于这一段排序去重的代码哪里出了问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void bubble_sort(int *arr,int len)
 {
    int i,j;
       for(i=0;i<len;i++){
           for(j=i+1;j<len;j++){
            if(arr[i]==arr[j]){
                arr[j]=arr[len-1];
                len--;
            }
        }}}//冒泡排序去重
int cmp1(const void *a,const void *b)
{
     return *(int *)a - *(int *)b;
}
int cmp2(const void *a,const void *b)
{
     return *(int *)b - *(int *)a;
}//升序降序函数
int main()
{   char judge;
scanf("%c",&judge);
    int a[1000];
    int x,i=0;
    while(scanf("%d",&x)!=EOF)
    {  a[i]=x;
    i++;}
    int num=0;
    int len=i;
  for(int j=0;j<i;j++){
           for(int k=j+1;k<i;k++){
            if(a[j]==a[k]){
                a[j]=a[len-1];
                len--;
                num++;
            }
        }}//本来不想重新写冒泡,但是为了找出去掉多少个元素我还是加了num变量,不知怎么改会更简便
bubble_sort(a,i-num);
if(judge=='A')
    qsort(a,i-num,sizeof(int),cmp1);
if(judge=='D')
    qsort(a,i-num,sizeof(int),cmp2);
    for(int j=0;j<i-num-1;j++)
        printf("%d ",a[j]);
    printf("%d",a[j-num-1]);
    return 0;
}
搜索更多相关主题的帖子: int void return const for 
2020-03-10 04:25
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 


有 n 个 1 到 1000 之间的整数 (1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再按照指定的排序方式把这些数排序。
输入格式

第 1 行为字母 A 或 D,A 表示按照升序排序,D 表示按照降序排序。

第 2 行开始有若干个用一个空格或换行符分隔的正整数。
输出格式

相互之间用一个空格分隔的经去重和排序后的正整数。最后一个数后没有空格。
样例
Input

A
20 40 32 67 40 20 89 300 400 15

Output

15 20 32 40 67 89 300 400
PS:评分平台说我在第2个点就runtime error
我自己输入几个数连结果都看不到,我晕了

我想要两颗西柚。
2020-03-10 04:27
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
runtime error说明超时了,不能用常规排序解决。
题目限制了输入数小于1000,计数法排序正好适用,时间复杂度为o(n),没有什么排序比这个方法更快的了。
试下下面的代码,看能否通过:
程序代码:
#include<stdio.h>
int main()
{
    char judge;
    int s,e,i,j,x,a[1010]={0};
    scanf("%c",&judge);
    while(scanf("%d",&x)!=EOF)
        a[x]++;
    if(judge=='A')
    {
        s=0;
        e=1001;
        j=1;
    }
    else
    {
        s=1001;
        e=-1;
        j=-1;
    }
    for(i=s,x=0;i!=e;i+=j)
    {
        if(a[i])
        {
            if(x)
                printf(" ");
            else x=1;
            printf("%d",i);
        }
    }
    printf("\n");
    return 0;
}    
    

能编个毛线衣吗?
2020-03-10 07:05
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
回复 3楼 wmf2014
刚睡醒,代入了一下是可以的,好厉害!
但是我还没学到这块,有点看不懂

我想要两颗西柚。
2020-03-10 08:02
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
收藏
得分:0 
请问一下,这个是那里的题的
2020-03-10 08:10
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
回复 5楼 Knightl8
https://acm.ecnu.

我想要两颗西柚。
2020-03-10 08:19
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:10 
程序代码:
#include<stdio.h>

int main()
{
    char judge;
    scanf("%c",&judge);
    int a[1001]= {0};
    int i,x;

    while(scanf("%d",&x)!=EOF)
        a[x]++;

    if(judge=='A')
    {
        for(i=1; i<=1000; i++)
        {
            if(a[i]>0)
                printf("%d ",i);
        }
    }
    else if(judge=='D')
    {
        for(i=1000; i>0; i--)
        {
            if(a[i]>0)
                printf("%d ",i);
        }
    }

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-03-10 09:45
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
回复 7楼 纯蓝之刃
明白了,因为刚学完qsort就被思维定式了,原来可以这样写,谢谢!

我想要两颗西柚。
2020-03-10 10:07
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
不支持用bubble sort 用bucket sort,快且方便

2020-03-10 15:00
快速回复:请问一下关于这一段排序去重的代码哪里出了问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018928 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved