我们假设我们在数组中有以下数字:1,3,6,15 如果用户输入某个整数(例如数字5),那么如何在上面的数组中以正确的顺序插入它,以便您可以打印以下新数组: 要使用的数组是一个可变长度的数组,我们假设用户以排序和非递减的顺序输入数组的数字,因此不需要排序,但是只是在正确的位置插入一个元素(也由用户输入)。下面我有代码,我有多远,因为我不知道用什么命令将x插入数组,我是C编程的新手。
#include <stdio.h>
int insertion_array (int n, int ary[*]);
int main (void)
{
int n; // size
int x; // The element to be inserted in the array
int i, j;
printf("Enter size of array: ");
scanf("%d", &n);
printf("Enter the value of x: ");
scanf("%d", &x);
int ary[n];
for(i = 0; i < n; i++)
{
printf("Enter number %d: ", i + 1);
scanf("%d", &ary[i]);
} // for
return 0;
} // main
答案 0 :(得分:0)
我可以想出一个简单的O(n)算法:
但是有插入的O(lgn)算法,例如AVL树,RB树等等。但是要复杂得多。
#include <stdio.h>
#include <stdlib.h>
int binsearch(int *arr, int size, int key)
{
int low = 0, high = size - 1;
if (key > arr[high]) return size;
while (high > low) {
int mid = (low + high) / 2;
if (arr[mid] > key) high = mid;
else low = mid + 1;
}
return low;
}
int main()
{
int size = 10;
int *arr = (int *)malloc(size * sizeof(int));
int elem, len = 0;
arr[len++] = 0;
while (scanf("%d", &elem) != EOF) {
int pos = binsearch(arr, len, elem);
printf("%d\n", pos);
int i;
for (i = len-1; i >= pos; --i)
arr[i+1] = arr[i];
arr[pos] = elem;
++len;
for (i = 0; i < len; ++i)
printf("%d ", arr[i]);
printf("\n");
}
free(arr);
return 0;
}