c语言排序后删除数组中重复的数字再排序输出

用c语言编一个程序,要求输入5(用户自定义)个数字,用数组接收,然后进行冒泡法排序,接着如果有重复的数字,则删除重复的数字,只留一个再与其它不重复的数字排序后再输出!比如输入2 5 6 3 4,则输出2 3 4 5 6;输入4 2 2 3 5,则输出2 3 4 5。不要太复杂,最好用for循环,也不要用函数调用,谢谢!!!

#include<stdio.h>

#include<string.h>

#defineSIZE81

voiddelete_repeat(char*str);

voidbubble_sort(char*str);

intmain()

{

charstr[SIZE];

gets(str);

delete_repeat(str);

bubble_sort(str);

puts(str);

return0;

}

//删除重复字符

voiddelete_repeat(char*str)

{

/**判断数组内第i个字符是否与前i-1个字符存在重复:

若重复,删除该字符,i之后的字符下标均减1,后重新判断新的第i个字符

若不重复,不做处理,继续遍历下一个

*/

for(inti=1;str[i]!='\0';i++){

for(intj=0;j<i;j++)

{

if(str[i]==str[j])

{

for(intk=i;k<strlen(str)-1;k++)

{

str[k]=str[k+1];

}

str[strlen(str)-1]='\0';

i--;

}

}

}

}

//冒泡排序

voidbubble_sort(char*str)

{

intswap;

chartemp;

intk=strlen(str);

do{

swap=0;

for(inti=0;i<k-1;i++){

if(str[i]>str[i+1])

{

swap=1;

temp=str[i];

str[i]=str[i+1];

str[i+1]=temp;

}

}

k--;

}while(k>0&&swap);

}

扩展资料

删除排序数组中的重复项注意事项

不要使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成,意味着不能通过新建数组存放的方式解决。

可以考虑增加一个游标的方式(命名为:index),遍历整个数组,当遇到前一个和后一个不相等的时候就给游标自增,这样的话对于相同的元素可以直接跳过不统计,最后返回”游标的大小+1“(也即不重复的元素的个数)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-06
#include <stdio.h>
main()

 int i,j,t;
 int a[10];
 printf("请输入10个数:\n");
 for(i=0;i<10;i++)           //输入
  scanf("%d",&a[i]);
 printf("输入的10个数是:");
 for(i=0;i<10;i++)
  printf("%d  ",a[i]);
 printf("\n");
 for(i=0;i<10;i++)           //排序
 {
  for(j=i+1;j<10;j++)
  {
   if(a[i]>a[j])
   {
    t=a[i];
    a[i]=a[j];
    a[j]=t;
   }
  }
 }
 
 printf("10个数排序后是:");
 for(i=0;i<10;i++)
 {
  printf("%d  ",a[i]);
 }
 printf("\n");
 for(i=0;i<9;i++)     //删除重复数字
 {
  if(a[i]==a[i+1])    //如果后一个数等于前一个数,就把后一个数删掉(ps:这里已经排过序,所以可以这样做来删除重复数字)
  {
   for(j=i+1;j<9;j++)    //这里的删除用的直接覆盖
    a[j]=a[j+1];
  }
 }
 printf("删除重复数字后:");
 for(i=0;i<10;i++)
 {
  if(i>0&&a[i-1]==a[i])    //只输出前面不重复的数
   break;
  printf("%d  ",a[i]);
 }
 printf("\n");
}

本回答被提问者采纳
第2个回答  2013-05-25
代码就不给你写了,我的思路是:先将所有数字冒泡排序(书上有代码),然后输出的时候,
flag=a[0];输出a[0];
for(int i=0;i<N;i++)
{
if(a[i]!=flag){输出a[i];flag=a[i];}
}
就这么多了,剩下的自己写吧,顺便说一句,学习编程要多敲代码

相关了解……

你可能感兴趣的内容

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