我正在实施扫描和修剪,我遇到了一个问题,快速排序有效而插入排序无效,这是两者的代码:
plist 是粒子列表,lenplist 是它的长度和 sortbyx 持有指数
插入排序
int sort(){
for(int i=1;i<lenplist;i++){
int ar=i-1;
int currentpos=sortbyx[i];
double current=plist[sortbyx[i]].pos.x-plist[sortbyx[i]].radius;
while(ar>-1 && (plist[sortbyx[ar]].pos.x-plist[sortbyx[ar]].radius)>(current)){
sortbyx[ar+1]=sortbyx[ar];
ar--;
}
sortbyx[ar+1]=currentpos;
}
return 0;
}
这是我的快速排序实现
int quicksort(int leng,int *array){
if(leng<2){
return 0;
}
int alen=0;
int blen=0;
int *a = new int[leng];
int *b = new int[leng];
int pivot=array[leng/2];
for(int i=0;i<leng;i++){
if(leng/2==i){
}
else{
if ((plist[array[i]].pos.x-plist[array[i]].radius)<(plist[pivot].pos.x-plist[pivot].radius)){
a[alen]=array[i];
alen++;
}
else{
b[blen]=array[i];
blen++;
}
}
}
quicksort(alen,a);
quicksort(blen,b);
for(int i=0;i<blen;i++){
array[i]=b[i];
}
array[blen]=pivot;
for(int i=0;i<alen;i++){
array[blen+1+i]=a[i];
}
delete[] a;
delete[] b;
return 0;
}
我期待插入排序工作,但它没有,粒子剪辑并成为两层。