C++完成對輸出數字組停止排序。本站提示廣大學習愛好者:(C++完成對輸出數字組停止排序)文章只能為提供參考,不一定能成為您想要的結果。以下是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";
}