2014-09-23 2 views
-1

Я нашел реализацию quicks на веб-сайте. Вот он:Распечатка элементов массива после quicksort

#include <iostream> 
#include <algorithm> 

int partition (int arr[], int l, int h) 
{ 
    int x = arr[h]; 
    int i = (l - 1); 

    for (int j = l; j <= h- 1; j++) 
    { 
     if (arr[j] <= x) 
     { 
      i++; 
      std::swap(arr[i], arr[j]); 
     } 
    } 
    std::swap(arr[i + 1], arr[h]); 
    return (i + 1); 
    } 

/* A[] --> Array to be sorted, l --> Starting index, h --> Ending index */ 
void quickSort(int A[], int l, int h) 
{ 
    if (l < h) 
    {   
     int p = partition(A, l, h); /* Partitioning index */ 
     quickSort(A, l, p - 1); 
     quickSort(A, p + 1, h); 
    } 

    } 

int main() 
{ 
    int N; 
    int l = 1, h = N-1; 
    int i = 0; 
    int array[N]; 
    std::cin >> N; 
    for(int j = 0; j<N; j++) 
    { 
    std::cin >> array[j]; 
    j++; 
    } 
    quickSort(array, l, h); 
    for(int k = 0; k<N; k++) 
    { 
    std::cout << array[k]; 
    } 

    return 0; 
    } 

Я добавил бит в конец main(), чтобы напечатать массив. Правильно ли это? Как только я добавил эту часть, я начал получать ошибку ошибки сегментации. Как это исправить?

+0

Compile со всеми предупреждениями и отладочной информации ('НКУ -Wall -g'), то ** использовать отладчик ** ('gdb'). Но вы действительно должны использовать C++ 11 и его 'std :: sort' –

+0

Этот' main' сломан. Мой совет будет состоять в том, чтобы держаться подальше от того места, где вы его нашли. – molbdnilo

+0

Это 'main' не будет компилироваться. –

ответ

1

Вы объявляете ваш array и инициализирует h, прежде чем вы инициализирован N, попробуйте:

std::cin >> N; 
int* array = new int[N]; 
int h = N - 1; 
+0

Вы имеете в виду 'std :: vector array (N);'. В C++ никогда не было причин использовать новый массив. –

+0

@JamesKanze абсолютно, просто пытался держать его как можно ближе к OP. –

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