如何交换数组中的2个元素?

时间:2018-03-27 10:39:13

标签: c arrays

所以我正在做一个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 

3 个答案:

答案 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;
}