非递归的归并排序

const int LEN = 20;
void MergeSort(){
    int data[LEN];
    int data2[LEN];
    for(int i=0;i<LEN;++i){
        data[i] = rand()%100;
    }
    for(int i=0;i<LEN;++i)
        cout<<data[i]<<" ";
    cout<<endl;
    int step = 1;
    for(;step<LEN;step *= 2){
        for(int start = 0;start < LEN;start += 2*step){
            int preindex = start;
            int preend = start + step;
            int postindex = start + step;
            int postend = (postindex+step<LEN)?(postindex+step):(LEN);
            int tmpindex = 0;
            while(preindex < preend && postindex < postend){
                if(data[preindex] < data[postindex]){
                    data2[tmpindex++] = data[preindex++];
                }
                else{
                    data2[tmpindex++] = data[postindex++];
                }
            }
            while(preindex < preend)
                data2[tmpindex++] = data[preindex++];
            while(postindex < postend)
                data2[tmpindex++] = data[postindex++];
            for(int i=0;i<tmpindex;++i)
                data[start+i] = data2[i];
        }
    }
    for(int i=0;i<LEN;++i)
        cout<<data[i]<<" ";
    cout<<endl;
}

点赞