我必須編寫並測試排序在25%,50%,75%,95%,99%和99.7%以及隨機填充的數組時的快排。當我使用大小爲500k的數組時,我的程序通過隨機數組和25%排序的數組沒有任何問題(但25%的排序數組需要它158s),但是對於50%的排序數組,它會引發分段錯誤和「返回過程139(0x8b)」。 「 對於較小的數組,例如100k,甚至排序,一切正常。 我如何生成(無需參數「zakres」,我知道)我的數組:部分排序的大小爲500000的排序的快速排序分段錯誤
void generujTablice(int zakres,float sorted, int size_of_array)
{
Tablica = new int[size_of_array]; //allocating space for array
if(sorted == -1) //when array have to be sorted, but inverted
for(int i=0;i<size_of_array;i++)
Tablica[i] = size_of_array-i;
else
{
for(int i=0;i<sorted * size_of_array;i++) //example: if sorted is 0.25 array have to be sorted in 25% from beginning
Tablica[i] = i;
for(int i=sorted * size_of_array;i<size_of_array;i++) //rest of array is filled randomly but values have to be bigger than these in sorted part of array
Tablica[i] = rand()%int(size_of_array)+sorted * size_of_array;
}
}
我的快速排序: (注:我選擇的第一個元素爲支點,因爲我要檢查算法的最壞情況。我曾評論符合第一個元素隨機混合另外一個,當我用這個交換一切正常,非常非常快。離開路易==,prawy ==右)
#include <algorithm>
void quicksort(int * Tablica, int lewy, int prawy)
{
if(lewy<prawy)
{
//swap(Tablica[lewy], Tablica[rand()%(prawy-lewy)+lewy]);
int x = Tablica[lewy];
int i = lewy, j = prawy;
do{
while(Tablica[i] < x) i++;
while(Tablica[j] > x) j--;
if(i<=j) swap(Tablica[i++], Tablica[j--]);
}while(i<=j);
quicksort(Tablica,lewy,j);
quicksort(Tablica,i,prawy);
}
}
我正在使用Ubuntu。我試圖谷歌什麼是錯的,但在我看來,我的算法幾乎與我發現的一些相同,所以我不知道如何解決它。 對不起,我的英語不幸,我不經常使用它。
感謝您的幫助。
嘗試使用std :: vector作爲Tablica而不是動態分配的數組。 –
你打電話給'快速排序'? –
'} while(i <= j);' - 我認爲這需要是<<,而不是<='。 –