C++实现对输入数字组进行排序
本是一个再简单不了的功能,然后只是冒泡排序。可是我在交互输入数列的时候,只用空格隔开然后回车,如果不限定数的个数,用scanf并不能完成这个任务,他循环获取,到最后不能判断获取结束,而只能继续等待输入。
这个时候我自定义一个函数,获取缓存区中的数(空格分隔),如果输入结束就返回一个特定的值,这个函数是用getchar循环嵌套实现的。本人新手,只能弄出这方法。欢迎各位大神指导。
maopao-complex.c
//比较复杂的数组接收方法,然后从大到小排序。VC环境
#include<stdio.h>
#include<stdlib.h>
intover=0;//用于读取数,如果读取结束,为1
intmain(void)
{
//这一部分,接收数据,判断数据个数
intgetvalue(void);//函数原型。返回从缓冲区取得的数,如果输入结束,返回42949672
intk;//子循环临时变量
inta[100];//建立100个数空间,可增缩范围
intnum;//输入的个数
intifend=1;//逻辑变量,控制while语句
inti=0;//通用计次临时变量
intvalue;//元素值储存地
printf("请输入任意数的序列,空格隔开:\n");
while(ifend)
{
value=getvalue();
if(value==42949672)
ifend=0;
else
{
a[i]=value;
i++;
}
}//结束后,i为数组成员个数
num=i;
//开始排序
for(i=0;i<num-1;i++)//循环8次,第n次把第n位以后的数的最大值放第n个
{
for(k=i+1;k<num;k++)//用k表示后面的各位,递增。
{
if(a[i]<a[k])//选大数,放第n位
{
a[i]=a[i]+a[k];
a[k]=a[i]-a[k];
a[i]=a[i]-a[k];//以上三步,把较大值放到a[i]
}
}
}
//输出新数组
printf("排序后:\n");
for(i=0;i<num;i++)
{
printf("%d",a[i]);
}
printf("\n");
return0;
}
intgetvalue(void)
{
chara[16]={0};//数字接收临时数组
intk;
intvalue=0;
chartemp;
intlast=1;
intifend=1;
inti=0;//用来定位数组
if(over==1)
{
ifend=0;
return(42949672);
}
temp=getchar();
while(ifend)
{
if(temp==32)//接收结束,把临时数组转化成数字
{
value=atoi(a);
ifend=0;
}
elseif(temp=='\n')//缓冲区已无数值
{
value=atoi(a);
over=1;
ifend=0;
}
else//输入有效数值
{
if(temp=='-')
{
last=-1;
}
else
{
a[i]=temp;
i++;
}
temp=getchar();
}
}
value*=last;
return(value);
}
下面是一个简单的冒泡排序:
#include<iostream>
usingnamespacestd;
voidBubbleSort(int*pData,intCount)
{
intiTemp;
for(inti=1;i<Count;i++)
{
for(intj=Count-1;j>=1;j--)
{
if(pData[j]<pData[j-1])
{
iTemp=pData[j-1];
pData[j-1]=pData[j];
pData[j]=iTemp;
}
}
}
}
voidmain()
{
intdata[]={10,9,8,7,6,5,4}
BubbleSort(data,7);
for(inti=0;i<7;i++)
cout<<data[i]<<"";
cout<<"\n";
}