2015-12-21 9 views
0

Я создал базовый массив и попытался отсортировать его с помощью сортировки вставки, но я получаю эти ошибки при запуске программы. Там нет ошибок после компиляцииОшибка выполнения сортировки вставки

./insertionsort.c: строка 3: $ '\ г': команда не найдена

./insertionsort.c: Строка 4: ошибка синтаксиса около неожиданной лексемы `('

' /insertionsort.c: строка 4: `недействительной сортировка (INT * массив, 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; 
} 
?
+0

Как вы скомпилируете исходный файл? Как вы его используете? Вы в Linux или Windows? Вы используете IDE или командную строку? – mihai

+0

Я нахожусь в окнах, и я использую терминал cygwin – Michael

+1

Ну, тогда я думаю, вы можете просто использовать 'gcc -o main main.c', где' main.c' будет исходным файлом, содержащим код сверху , А затем просто введите './Main', чтобы запустить программу. Я не вижу, где проблема, но, может быть, я чего-то не хватает. Не могли бы вы попробуете это? Или вы используете другой метод для builld/запуска вашего приложения ?! – mihai

ответ

1

Я думаю, что вы можете захотеть сделать

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

, как sizeof(arr) даст вам общее количество байтов, необходимых массиве.

Кроме того, вы печатаете указатели. Таким образом, вы можете удалить & в операторах печати:

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

Наконец, вы передаете по значению вашей swap функции. Таким образом, исходный массив не будет изменен. Вы можете подпись, как это:

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

Я не получаю ошибку запуска вашей программы, только предупреждения для вашего printf, причина быть один упоминалось выше. Вы должны скомпилировать/запустить свою программу примерно так: gcc -o main main.c где main.c будет исходным файлом, содержащим код сверху. А потом просто введите ./main.

+0

Как я могу исправить проблему передачи по значению моей функции подкачки? Я попробовал добавить asterix перед array1 и array2 в функцию swap, но я просто получаю больше ошибок – Michael

+0

@Michael, вы также должны изменить вызов вашей 'swap' в функции' sort'. Подсказка: это имеет какое-то отношение к указателям. – mihai

+0

Благодарю вас за помощь, я не могу понять функцию подкачки (это уже поздно), поэтому я просто взял ее и поместил ее содержимое в инструкцию if.Сейчас прекрасно работает – Michael

1

От имени программы ./insertionsort.c в сообщении об ошибке, я думаю, вы пытаетесь выполнить исходный код напрямую, что не является обычной процедурой.

Я думаю, что вы должны ввести имя вашего скомпилированного двоичного файла вместо исходного кода на ваш терминал для запуска программы.

+0

Это было бы интересно. Но мог ли исполняемый файл '.c' по умолчанию ?! Разве он не должен «отказываться от права»? Я предполагаю, что он не просто «chmod + x insertionsort.c» по ошибке. – mihai

+0

@Mihai Это выполнение выполняется в Windows, на котором такой 'chmod' не требуется для выполнения файлов. – MikeCAT

 Смежные вопросы

  • Нет связанных вопросов^_^