为扫描和修剪排序对象的问题

问题描述 投票:0回答:0

我正在实施扫描和修剪,我遇到了一个问题,快速排序有效而插入排序无效,这是两者的代码:

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;
}

我期待插入排序工作,但它没有,粒子剪辑并成为两层。

c++ physics-engine
© www.soinside.com 2019 - 2024. All rights reserved.