插入排序运行时错误

Insertion sort runtime error

我创建了一个基本数组并尝试使用插入排序对其进行排序,但在我 运行 程序时遇到了这些错误。编译后没有报错

./insertionsort.c: line 3: $'\r': command not found

./insertionsort.c: line 4: syntax error near unexpected token `('

'/insertionsort.c: line 4: `void sort(int *array, int n);

有人知道如何解决这个问题吗?

#include <stdio.h>
#include <stdlib.h>

void sort(int *array, int n);
void swap(int array1, int array2);


void main()
{
    int arr[] = {1, 5, 3, 5, 4, 3, 2, 7, 4, 9, 6};
    int n = sizeof(arr);

    sort(arr, n);
}

void sort(int *array, int n)
{
    int i, j;

    printf("Array before sorting: ");
    for (i=0; i<n; i++)
        printf("%d ", &array[i]);

    for (i=1; i<n; i++)
    {
        for (j=i; j>0; j--)
        {
            if (array[j-1] > array[j])
                swap(array[j], array[j-1]);
        }
    }

    printf("Array after sorting: ");
    for (i=0; i<n; i++)
        printf("%d ", &array[i]);
}

void swap(int array1, int array2)
{
    int temp;
    temp = array1;
    array1 = array2;
    array2 = temp;
}

我想你可能想做

int n = sizeof(arr) / sizeof(int);

as sizeof(arr) 会给出数组所需的总字节数。

此外,您正在打印指针。因此,您可以删除打印语句中的 &

printf("%d ", array[i]);

最后,您将按值传递给 swap 函数。所以原来的数组不会被修改。您可能需要这样的签名:

void swap(int *array1, int *array2);

我没有收到任何错误 运行 你的程序,只有 printf 的警告,原因就是上面提到的那个。你应该 compile/run 你的程序是这样的: gcc -o main main.c 其中 main.c 是包含上面代码的源文件。然后输入 ./main.

根据您的错误消息中的程序名称 ./insertionsort.c,我猜您正试图直接执行您的源代码,这不是正常程序。

我认为你应该输入你编译的二进制文件的名称而不是你的源代码到你的终端运行程序。