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"; }