常見排序算法C++實現

快速排序:


void recursive(vector<int>& vec,int start,int end) {
    if(start>=end) {
        return ;
    }
    int split_num = vec[start];
    int pos = start+1;
    int i=end;
    int temp;
    while(pos<=i&&i>start) {
        if(vec[i]<split_num) {
            temp=vec[pos];
            vec[pos]=vec[i];
            vec[i]=temp;
            pos++;
        } else {
            i--;
        }
    }
    temp=vec[start];
    vec[start]=vec[pos-1];
    vec[pos-1]=temp;
    recursive(vec,start,pos-2);
    recursive(vec,pos,end);
}

void quickSort(vector<int>& vec) {
    recursive(vec,0,vec.size()-1);
}

歸併排序:

void recursive(vector<int>& vec,int start,int end) {
    if(start>=end) {
        return ;
    }
    int mid=(start+end)/2;
    recursive(vec,start,mid);
    recursive(vec,mid+1,end);
    vector<int> copy;
    int index1=start;
    int index2=mid+1;
    while(index1<=mid&&index2<=end) {
        if(vec[index1]<vec[index2]) {
            copy.push_back(vec[index1++]);
        } else {
            copy.push_back(vec[index2++]);
        }
    }
    while(index1<=mid) {
        copy.push_back(vec[index1++]);
    }
    while(index2<=end) {
        copy.push_back(vec[index2++]);
    }
    for (int i = start; i <= end; i++)
    {
        vec[i]=copy[i-start];
    }
}

void mergeSort(vector<int>& vec) {
    recursive(vec,0,vec.size()-1);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章