Я пытался реализовать алгоритм быстрой сортировки.Вот код самой Quicksort
void quicksortlast(double* a, int first, int last)
{
if(first<last)
{
int pIndex=partition(a, first, last);
quicksortlast(a, first, pIndex-1);
quicksortlast(a, pIndex+1, last);
}
}
Переменная pIndex - это расположение элемента, который находится в правильном положении.Я выбрал последний элемент массива в качестве основного в схеме разбиения.Следующий код должен разделить массив:
int partition(double* a, int first, int last)
{
int pivot=last;
int i=0;
int j=last-1;
while(i<j && i<=last && j>=0)
{
while(a[i++]<a[pivot])
{
if(i>last)
break;
}
while(a[j--]>a[pivot])
{
if(j<0)
break;
}
if(i<j && i<=last && j>=0)
{
swap(a,i,j);
i++;
j--;
}
}
swap(a,j,pivot);
return j;
}
Функция разделения использует функцию подкачки, определенную как
void swap(double* a, int left, int right)
{
int temp=a[left];
a[left]=a[right];
a[right]=temp;
return;
}
И, конечно, есть функция test.cpp, котораяпроверяет алгоритм.
#include <iostream>
#include "qsort.h"
using namespace std;
int main()
{
int len;
cin>>len;
double* a= new double[len];
for(int i=0;i<len;i++)
cin>>a[i];
cout<<"Unsorted array"<<endl;
print(a,len);
quicksortlast(a, 0, len-1);
cout<<"printed array"<<endl;
print(a, len);
return 0;
}
Функция print при первом вызове печатает несортированный массив, но выдает сообщение об ошибке:
Segmentation fault(core is dumped).
Я понимаю, что некоторая область памятидоступ, но я не понимаю, где лежит настоящая ошибка.Любая помощь высоко ценится.