C++实现对输入数字组进行排序

本是一个再简单不了的功能,然后只是冒泡排序。可是我在交互输入数列的时候,只用空格隔开然后回车,如果不限定数的个数,用scanf并不能完成这个任务,他循环获取,到最后不能判断获取结束,而只能继续等待输入。

这个时候我自定义一个函数,获取缓存区中的数(空格分隔),如果输入结束就返回一个特定的值,这个函数是用getchar循环嵌套实现的。本人新手,只能弄出这方法。欢迎各位大神指导。

maopao-complex.c

//比较复杂的数组接收方法,然后从大到小排序。VC环境

#include <stdio.h>

#include <stdlib.h>

int over=0;//用于读取数,如果读取结束,为1

int main(void)

{

//这一部分,接收数据,判断数据个数

int getvalue(void); //函数原型。返回从缓冲区取得的数,如果输入结束,返回42949672

int k; //子循环临时变量

int a[100]; //建立100个数空间,可增缩范围

int num; //输入的个数

int ifend = 1; //逻辑变量,控制while语句

int i=0; //通用计次临时变量

int value; //元素值储存地

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

return 0;

}

int getvalue(void)

{

char a[16]={0}; //数字接收临时数组

int k;

int value=0;

char temp;

int last = 1;

int ifend = 1;

int i = 0; //用来定位数组

if (over == 1)

{

ifend = 0;

return (42949672);

}

temp = getchar();

while(ifend)

{

if (temp == 32)//接收结束,把临时数组转化成数字

{

value = atoi(a);

ifend = 0;

}

else if (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>

using namespace std;

void BubbleSort (int* pData,int Count)

{

int iTemp;

for(int i=1; i<Count; i++)

{

for (int j=Count-1; j>=1; j--)

{

if (pData[j]<pData[j-1])

{

iTemp=pData[j-1];

pData[j-1]=pData[j];

pData[j]=iTemp;

}

}

}

}

void main()

{

int data[]= {10,9,8,7,6,5,4}

BubbleSort(data,7);

for (int i=0;i<7;i++)

cout<<data[i]<<" ";

cout<<"\n";

}

以上是 C++实现对输入数字组进行排序 的全部内容, 来源链接: utcz.com/z/315000.html

回到顶部