2015-01-06 3 views
0

Я уже искал информацию для алгоритма быстрой сортировки. Но я все еще не могу понять это на C. Я пытаюсь, но функция Quicksort не работает вообще. Я не могу найти ошибки в моем коде. Пожалуйста, помогите мне понять, что происходит.Реализация алгоритма быстрой сортировки

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

void swap(int a, int b) 
{ 
    int temp = 0; 
    temp = a; 
    a = b; 
    b = temp; 
} 

int Partition(int p , int r, int A[r - p + 1]) 
{ 
    int j = 0; 
    int x = A[r - 1]; 
    int i = p - 1; 
    for(j = p - 1; j < r - 1; j++) { 
     if(A[j] <= x) { 
      i = i + 1; 
      swap(A[i], A[j]); 
     } 
    } 
    swap(A[i], A[r - 1]); 
    return i + 1; 
} 

void Quicksort(int p, int r, int A[r - p + 1]) 
{ 
    int q = 0; 
    if((p - 1) < (r - 1)) { 
     q = Partition(p ,r , A); 
     Quicksort(p, q - 1, A); 
     Quicksort(q + 1, r, A); 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    int A[] = {10, 5, 1, 3, 9, 2, 4, 8, 7, 6}; 
    int i = 0; 
    int length = sizeof(A)/sizeof(int); 
    Quicksort(1, length , A); 

    for(i = 0; i < length; i ++) { 
    printf("%d ", A[i]); 
    } 
    printf("\n"); 
return 0; 
} 
+3

Ну, вы активизировали через код в отладчике? – OldProgrammer

+4

Ваша функция 'swap()' ничего не сделает. Он заменит содержимое своих локальных копий и вернется. Данные, которые вы его назвали ('A [i], A [j]' и т. Д.), Не будут изменены. Рассмотрим либо передачу (и получение) * указателей * на целые числа, либо реализацию 'swap()' в качестве макроса. –

+0

Фактически, я этого не сделал. Наверное, я сейчас попробую. – AndreyCHu

ответ

3

Вы должны передать значения в качестве указателей на функции swap

void swap(int *a, int *b) 
{ 
    int temp = 0; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 

, а затем изменить

swap(A[i], A[j]); 

в

swap(&A[i], &A[j]); 

и

swap(A[i], A[r - 1]); 

в

swap(&A[i], &A[r - 1]); 
+0

Есть ли '&' в C? – nbro

+0

Вы имеете в виду, как в C++, нет. –

+0

Итак, вы можете взять адрес переменной, используя &, но не имея ссылок ... – nbro

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