#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));
}
}