我在网站上找到了快速排序的实现。这是:
#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 :(得分:1)
您在初始化array
之前声明了h
并初始化N
,请尝试:
std::cin >> N;
int* array = new int[N];
int h = N - 1;