我已經實現了以下快速排序算法來排序幾個點(三維空間)。 每一對都定義一條線:目的是將所有距離小於或等於powR的線放在包含所有對的數組中。 包含座標的數組是單調的,每6個元素定義一對,每3個點。快速排序算法就地崩潰後一些迭代
當我運行帶有3099642元素數組的算法時,在處理2799222試圖進入下一次迭代後停止。如果我從元素2799228開始算法,它停在3066300. 我無法弄清楚問題出在哪裏,並提出建議?
void QuickSort(float *array, int from, int to, float powR){
float pivot[6];
float temp[6];
float x1;
float y1;
float z1;
float x2;
float y2;
float z2;
float d12;
int i;
int j;
if(from >= to)
return;
pivot[0] = array[from+0];
pivot[1] = array[from+1];
pivot[2] = array[from+2];
pivot[3] = array[from+3];
pivot[4] = array[from+4];
pivot[5] = array[from+5];
i = from;
for(j = from+6; j <= to; j += 6){
x1 = pivot[0] - array[j+0];
y1 = pivot[1] - array[j+1];
z1 = pivot[2] - array[j+2];
x2 = pivot[3] - array[j+3];
y2 = pivot[4] - array[j+4];
z2 = pivot[5] - array[j+5];
d12 = (x1*x1 + y1*y1 + z1*z1) + (x2*x2 + y2*y2 + z2*z2);
/*the sorting condition i am using is the regular euclidean norm*/
if (d12 <= powR){
i += 6;
temp[0] = array[i+0];
temp[1] = array[i+1];
temp[2] = array[i+2];
temp[3] = array[i+3];
temp[4] = array[i+4];
temp[5] = array[i+5];
array[i+0] = array[j+0];
array[i+1] = array[j+1];
array[i+2] = array[j+2];
array[i+3] = array[j+3];
array[i+4] = array[j+4];
array[i+5] = array[j+5];
array[j+0] = temp[0];
array[j+1] = temp[1];
array[j+2] = temp[2];
array[j+3] = temp[3];
array[j+4] = temp[4];
array[j+5] = temp[5];
}
}
QuickSort(array, i+6, to, powR);
}
函數被調用以這種方式: 浮子的LOR =(浮動)釋放calloc((無符號)TOT,的sizeof(浮動));
LORs從文件中填充讀取數據,並且工作正常。
QuickSort(LORs, 0, 6000, powR);
free(LORs);
在函數內部使用調試器或某些打印來查看它的崩潰位置。 – gsamaras
我打印所有我可以,我唯一的信息是,它嘗試進入遞歸迭代與開始索引時崩潰2799228 – user3589951
另外,我建議你使用較少的數字作爲輸入,並說如何調用函數。但什麼是K和至?你忘了我猜的一些代碼。 – gsamaras