2014-09-23 53 views
-1

我在網站上發現了快速排序的實現。它是:在快速排序後打印出數組的元素

#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

編譯所有警告和調試信息('GCC -Wall -g')則**使用調試器** ('gdb')。但是你真的應該使用C++ 11和它的'std :: sort' – 2014-09-23 12:23:14

+0

'main'壞了。我的建議是遠離你發現它的地方。 – molbdnilo 2014-09-23 12:49:18

+0

'main'不會編譯。 – 2014-09-23 13:51:18

回答

1

你宣佈你array並初始化h你初始化N之前,請嘗試:

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

你的意思是'std :: vector array(N);'。 C++中沒有任何理由使用數組new。 – 2014-09-23 13:51:01

+0

@JamesKanze絕對,只是試圖儘可能保持接近OP。 – 2014-09-23 14:07:49