所以我正在做一个na函数“insere”,它应该是一个有序数组“v []”,它的大小“N”插入那里“x”。
我的想法是在最后一个位置插入x,然后将其与之前的位置进行比较。如果x大于或等于那么它已经被订购以便全部完成,如果不是我会交换它们并做同样的事情等等。
这里的问题是,它只是将x添加到最后一个位置而不再执行任何操作。我想知道我的交换功能是交换还是实际上什么也没做。
void swap (int *v,int i,int j)//swap 2 elements of an array
{
int a=v[i];
v[i]=v[j];
v[j]=a;
}
void insere (int v[],int N,int x)//inserts an elemento in a ordered array
{
int i =N;
v[N+1]=x;
while (i>=0)
{
if (v[i]<=v[i+1])break;
else (swap (v,i,i+1))
i--;
}
}
输入:
x=12
v = 1 12 13 14 15 16 17 18 19 110 111 112 113 114 115 116 117 118 119
输出:预期
1 12 12 13 14 15 16 17 18 19 110 111 112 113 114 115 116 117 118 119
获得
1 12 13 14 15 16 17 18 19 110 111 112 113 114 115 116 117 118 119 12
答案 0 :(得分:1)
int insertSorted(int arr[], int n, int key, int capacity)
{
// Cannot insert more elements if n is already
// more than or equal to capcity
if (n >= capacity)
return n;
int i;
for (i=n-1; ( i >= 0 && arr[i] > key); i--)
arr[i+1] = arr[i];
arr[i+1] = key;
return (n+1);
}
int main()
{
int arr[20] = {12, 16, 20, 40, 50, 70};
int capacity = sizeof(arr)/sizeof(arr[0]);
int n = 6;
int i, key = 26;
printf("\nBefore Insertion: ");
for (i=0; i<n; i++)
printf("%d ", arr[i]);
// Inserting key
n = insertSorted(arr, n, key, capacity);
printf("\nAfter Insertion: ");
for (i=0; i<n; i++)
printf("%d ",arr[i]);
return 0;
}
在数组中添加26
<强>输出强>:
Before Insertion: 12 16 20 40 50 70
After Insertion: 12 16 20 26 40 50 70
答案 1 :(得分:0)
此行不正确:
if
您将 if (v[i] <= v[i+1])
break;
作为 if (v[i] <= v[i+1])
continue;
声明的条件的一部分。
我想你的意思是:
{{1}}
甚至可能:
{{1}}
答案 2 :(得分:0)
这是你的代码。当我执行它时它对我来说很好。请找到以下代码,
#include <stdio.h>
void swap (int *v,int i,int j){ //swap 2 elements of an array
int a=v[i];
v[i]=v[j];
v[j]=a;
}
void insere (int v[],int N,int x){ //inserts an elemento in a ordered array
int i =N;
v[N+1]=x;
while (i>=0)
{
if (v[i]<=v[i+1])break;
else {swap (v,i,i+1);}
i--;
}
}
int main(void) {
// your code goes here
int v[]={1, 12, 13, 14, 15, 16, 17, 18, 19, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119};
int size = sizeof(v)/sizeof(v[0]);
insere(v, size, 12);
for(int i=0; i<size+1; i++)
printf("%d ", v[i]);
return 0;
}