#include
void InsertionSort(int* arr, int n) // 插入排序
{
int *last = 0, *next = 0, key = 0, i = 0;
for (i = 1; i < n; ++i)
{
next = arr + i, key = *next;
if (key < *arr) // 将待插的数据比第一个数据小,直接插到最前面。
{
for (last = next; next != arr; next = last)
*next = *--last;
*arr = key;
}
else // 否则从后往前遍历,找到第一个小于关键字的位置插入。
{
for (last = next; key < *--last; next = last)
*next = *last;
*next = key;
}
}
}
void OutPutArray(const int* arr, int n) // 打印一个数组
{
for (int i = 0; i < n; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void InsertNumber(int* arr, int n)
{
int key = 0, i = 0;
InsertionSort(arr, n - 1); // 对之前的n-1个数排序
// OutPutArray(arr, n - 1); // 这里可以打印出来看一下对之前的数据排序是否正确
scanf("%d", &key); // 输入一个数
if (key < arr[0]) // 参照之前的插入排序原理,将这个数插入到数组。
{
for (i = n-1; 0 < i; --i)
{
arr[i] = arr[i - 1];
}
arr[0] = key;
}
else
{
for (i = n-2; key < arr[i]; --i)
{
arr[i + 1] = arr[i];
}
arr[++i] = key;
}
}
int main()
{
int arr[10] = { 0 };
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d" // 输入9个数
, arr + 0, arr + 1, arr + 2, arr + 3, arr + 4, arr + 5, arr + 6, arr + 7, arr + 8);
InsertNumber(arr, 10); // 调用函数,将输入的第10个数插进去。
OutPutArray(arr, 10); // 输出
return (0);
}