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