2013-05-18 2 views
0

Тест состоит в создании массива размером 10000. Инициализируйте его значениями 10000 до 1, а затем используйте сортировку пузырьков, чтобы отменить порядок. Поскольку сортировка пузырьков является одним из худших возможных сортов , это займет довольно много времени. Однако разрешение сроков ограничено.Bubble Sort Time C program

Решение состоит в том, чтобы поставить задачу внутри цикла, которая повторяет ее тысячу или миллион раз - все, что требуется, чтобы получить номера до того, с чем вы можете иметь дело. Я получаю ошибки в своем коде. См. Мой код ниже.

Следующие команды выполняются на Linux:
GCC -o рода sort.c -O2
время ./sort

GCC -m32 -o рода sort.c -O2 -march = pentium4
время ./sort

#include <stdio.h> 

void bubbleSort(int numbers[], int array_size) 
{ 

    int i, j, temp; 

    for (i =0; i <array_size; i++) 
    { 
     for (j =0; j<array_size-1; j++) 
     { 
      if (numbers[j] > numbers[j+1]) { 
       temp = numbers[j]; 
       numbers[j] = numbers[j+1]; 
       numbers[j+1] = temp; 
      } 
     } 
    } 
} 

int main(void) 
{ 
    int array[10000]; 
    int i; 

    for(i=10000;i!=0;i--) 
    { 
     array[i-1]=i; 
    } 
    bubbleSort(array,10000); 
    for(i=0;i<10000;i++) 
    { 
     printf("%d\n",array[i]); 
    } 
    return 0; 
} 
+0

В чем проблема с кодом? Компилирует отлично, работает квадратично, как и ожидалось. –

+0

Какие ошибки вы получаете? выглядит нормально для меня. – Deepu

+0

Просьба указать ваши «ошибки», чтобы мы могли попытаться найти лучшее решение. –

ответ

0

В следующем порядке хранятся номера в массиве в порядке возрастания.

for(i=10000;i!=0;i--) 
    { 
     array[i-1]=i; 
    } 

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

 if (numbers[j] > numbers[j+1]) 
     { 
      temp = numbers[j]; 
      numbers[j] = numbers[j+1]; 
      numbers[j+1] = temp; 
     } 

Изменение выше, если как следует,

 if (numbers[j] < numbers[j+1]) 
     { 
      temp = numbers[j]; 
      numbers[j] = numbers[j+1]; 
      numbers[j+1] = temp; 
     } 
+0

никогда. это сработало ... спасибо! :) – CmpEStudent

+0

Какая ошибка? – Deepu

+0

Мне не хватало -pg от команды профилирования. – CmpEStudent

0

попробовать этот

void bubbleSort(int numbers[], int array_size) 
{ 
    int i, j, temp; 
    for (i =0; i <array_size-1; i++) 
    { 
     for (j =0; j<array_size - i -1; j++) 
     { 
     if (numbers[j] > numbers[j+1]) 
      { 
       temp = numbers[j]; 
       numbers[j] = numbers[j+1]; 
       numbers[j+1] = temp; 
      } 
     } 
    } 
} 
+0

Мне нужно объявить размер массива. – CmpEStudent

+0

Я также хочу запустить метод профилирования gcc -o sort sort.c -pg -O2 -march = pentium2 $ ./sort $ gprof --no-graph -b ./sort gmon.out время \t секунд секунд вызовы ms/call ms/имя вызова 100.00 0.79 0.79 1 790.00 790.00 bubbleSort 0.00 0.79 0.00 1 0.00 0.00 init_list он должен дать мне вышеуказанные значения, но я получаю ошибку gmon.out нет такого файла – CmpEStudent

+0

Я так не думаю , поскольку мы передаем аргумент как значение array_size, нет необходимости. И я попробовал оба, ваш код тоже работает нормально, ошибок нет. – manoj