编辑代码

#include <stdio.h>
#include <string.h>

void Input_Sorting(int* lv_inputVector, char lv_sizeOfArray);

int main(void)
{
  printf("本函数用于对一组数据进行递增排序\n");
  printf("输入数值的数量不大于254个,数值之间用空格分隔\n");

  char lv_tempDataCounter = 0;
  int lv_dataBuf[255] = {0};

  while (1)
  {
    int lv_tempScanfMem = 0;                                 //设置中间变量以便记录scanf存储值

    if (scanf("%d", &lv_tempScanfMem))                  //若scanf有效则记录并转存入缓冲区
    {
      lv_dataBuf[lv_tempDataCounter] = lv_tempScanfMem;
      lv_tempDataCounter++;                                   //缓冲区地址及计数值递增

      if (lv_tempDataCounter == 254)                       //到达缓冲区存储上限则停止输入
      {
        break;
      }
    }
    else
    {
        break;
    }
  }

  Input_Sorting(lv_dataBuf, lv_tempDataCounter - 1);                          //执行冒泡排序并打印
}

/************************************************ 
Function: // Input_Sorting
Description: // Sorting for the target array,sort up;
Input: // Address of the target array, int type; size of input array, char type;
Output: // None
Return: // None
Others: // Sizeof array have to smaller than 254
*************************************************/
void Input_Sorting(int* lv_inputVector, char lv_sizeOfArray)
{
  int *lv_pointNow;                                                 //随比较过程进行变动数值地址

  for (char j = 1; j < lv_sizeOfArray; j++)                  //最多需要进行数组大小减2轮可以完成排序
  {
    char lv_exchangeFlag = 0;
    lv_pointNow = lv_inputVector;

    for (char i = 1; i < lv_sizeOfArray; i++)                //从第一项开始轮流比较相邻项
    {
      if ((*lv_pointNow - *(lv_pointNow - 1)) < 0)       //判断前后项大小关系,若后项更小
      {
        int lv_tmp;                                                      //引入临时变量,帮助前后项数值交换

        lv_tmp= *lv_pointNow;                                   //进行前后项数值交换
        *lv_pointNow = *(lv_pointNow - 1);
        *(lv_pointNow - 1) = lv_tmp;
        lv_exchangeFlag = 1;                                      //置位标志位以标志存在交换过程
      }

      lv_pointNow++;                                               //地址递增以便进行下一次比较
    }

    if (!lv_exchangeFlag)                                           //若不存在交换过程,则意味着在上轮顺序已排好可以跳出循环结束全部排序进程
    {
      break;		
    }
  }

  for (char i = 0; i < lv_sizeOfArray; i++)                   //打印已排序后的升序数组
  {
    printf("%d ", *(lv_inputVector + i));
  }
}