首页 > 编程 > C++ > 正文

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

2020-05-23 14:13:05
字体:大 中 小
来源:转载
供稿:网友

这里给大家介绍的是通过某个方法实现判断命令行中输入的数字是几个,这样再用冒泡法排序的时候就不用担心输入的是几个数字,用到的知识主要是冒泡法排序

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

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

maopao-complex.c

 

 
  1. //比较复杂的数组接收方法,然后从大到小排序。VC环境 
  2. #include <stdio.h> 
  3. #include <stdlib.h> 
  4. int over=0;//用于读取数,如果读取结束,为1 
  5. int main(void) 
  6. { 
  7. //这一部分,接收数据,判断数据个数 
  8. int getvalue(void); //函数原型。返回从缓冲区取得的数,如果输入结束,返回42949672 
  9. int k; //子循环临时变量 
  10. int a[100]; //建立100个数空间,可增缩范围 
  11. int num; //输入的个数 
  12. int ifend = 1; //逻辑变量,控制while语句 
  13. int i=0; //通用计次临时变量 
  14. int value; //元素值储存地 
  15. printf("请输入任意数的序列,空格隔开:/n"); 
  16. while (ifend)  
  17. { 
  18. value = getvalue(); 
  19. if(value == 42949672) 
  20. ifend = 0; 
  21. else 
  22. { 
  23. a[i] = value; 
  24. i++; 
  25. } 
  26. } //结束后,i为数组成员个数 
  27. num = i; 
  28. //开始排序 
  29. for (i=0; i < num-1; i++) //循环8次,第n次把第n位以后的数的最大值放第n个 
  30. { 
  31. for(k=i+1; k<num; k++) //用k表示后面的各位,递增。 
  32. { 
  33. if (a[i] < a[k]) //选大数,放第n位 
  34. { 
  35. a[i] = a[i] + a[k]; 
  36. a[k] = a[i] - a[k]; 
  37. a[i] = a[i] - a[k];//以上三步,把较大值放到a[i] 
  38. } 
  39. } 
  40. } 
  41.  
  42. //输出新数组 
  43. printf("排序后:/n"); 
  44.  
  45. for (i=0; i<num; i++) 
  46. { 
  47. printf("%d ",a[i]);  
  48. } 
  49. printf("/n"); 
  50.  
  51. return 0; 
  52. } 
  53.  
  54.  
  55. int getvalue(void) 
  56. { 
  57. char a[16]={0}; //数字接收临时数组 
  58. int k; 
  59. int value=0; 
  60. char temp; 
  61. int last = 1; 
  62. int ifend = 1; 
  63. int i = 0; //用来定位数组 
  64. if (over == 1) 
  65. { 
  66. ifend = 0; 
  67. return (42949672); 
  68. } 
  69. temp = getchar(); 
  70. while(ifend) 
  71. { 
  72. if (temp == 32)//接收结束,把临时数组转化成数字 
  73. { 
  74. value = atoi(a); 
  75. ifend = 0; 
  76. } 
  77. else if (temp == '/n')//缓冲区已无数值 
  78. { 
  79. value = atoi(a); 
  80. over = 1; 
  81. ifend = 0; 
  82. } 
  83. else //输入有效数值 
  84. { 
  85. if (temp == '-') 
  86. { 
  87. last = -1; 
  88. } 
  89. else 
  90. { 
  91. a[i] = temp; 
  92. i++; 
  93. } 
  94. temp = getchar(); 
  95. } 
  96. } 
  97.  
  98. value*=last; 
  99. return (value); 
  100. } 

下面是一个简单的冒泡排序:

 

 
  1. #include <iostream> 
  2. using namespace std; 
  3. void BubbleSort (int* pData,int Count) 
  4. { 
  5. int iTemp; 
  6. for(int i=1; i<Count; i++) 
  7. { 
  8. for (int j=Count-1; j>=1; j--) 
  9. { 
  10. if (pData[j]<pData[j-1]) 
  11. { 
  12. iTemp=pData[j-1]; 
  13. pData[j-1]=pData[j]; 
  14. pData[j]=iTemp; 
  15. } 
  16. } 
  17. } 
  18. } 
  19. void main() 
  20. { 
  21.  
  22. int data[]= {10,9,8,7,6,5,4} 
  23. BubbleSort(data,7); 
  24. for (int i=0;i<7;i++) 
  25. cout<<data[i]<<" "; 
  26. cout<<"/n"; 
  27. } 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表