编程语言
首页 > 编程语言> > 十大经典排序算法C++实现

十大经典排序算法C++实现

作者:互联网

文章目录


十大经典排序算法(动图演示)

#include <iostream>
#include <vector>

using namespace std;

//冒泡排序
void bubblesort(vector<int>& arr){
    for(int i=0;i<arr.size()-1;++i){
        for(int j=0;j<arr.size()-1-i;++j){
            if(arr[j]>arr[j+1]){
                int temp=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=temp;
            }

        }
    }
}

//选择排序
void selectionsort(vector<int>& arr){
    int len=arr.size();
    
    for(int i=0;i<len-1;++i){
        int minidx=i;
        for(int j=i+1;j<len;++j){
            if(arr[j]<arr[minidx]) minidx=j;
        }
        int temp=arr[minidx];
        arr[minidx]=arr[i];
        arr[i]=temp;
    }
    
}

//插入排序
void insertionsort(vector<int>& arr){
    int indx,curr;
    
    for(int i=1;i<arr.size();++i){
        curr=arr[i];
        int j=i;
        while(j-1>=0&&arr[j-1]>curr){
            arr[j]=arr[j-1];
            --j;
        }  
        arr[j]=curr;
    }
}

//希尔排序
void shellsort(vector<int>& arr){
    for(int gap=arr.size()/2;gap>0;gap=gap/2){
        for(int i=gap;i<arr.size();++i){
            int curr=arr[i];
            int j=i;
            while(j-gap>=0&&arr[j-gap]>curr){
                arr[j]=arr[j-gap];
                j-=gap;
            }
            arr[j]=curr;
        }
    }
}

//归并排序递归
void merge(vector<int>& arr,vector<int>& temparr,int lstart,int rstart,int rend){
    int num=rend-lstart;
    int ptr=lstart,lend=rstart;
    while(lstart<lend&&rstart<rend){
        if(arr[lstart]<arr[rstart]) temparr[ptr++]=arr[lstart++];
        else temparr[ptr++]=arr[rstart++];
    }
    
    while(lstart<lend) temparr[ptr++]=arr[lstart++];
    while(rstart<rend) temparr[ptr++]=arr[rstart++];
    for(int i=0;i<num;++i,--rend){
        arr[rend-1]=temparr[rend-1];
    }
}

void msort(vector<int>& arr,vector<int>& temparr,int start, int end){
    if(end-start==1) return;
    else{
        msort(arr,temparr,start,(start+end)/2);
        msort(arr,temparr,(start+end)/2,end);
        merge(arr,temparr,start,(start+end)/2,end);
    }
}

void mergesort_recursion(vector<int>& arr){
    vector<int> temparr(arr.size(),0);
    msort(arr,temparr,0,arr.size());
}

//归并排序非递归
void mergesort(vector<int>& arr){
    vector<int> temparr(arr.size(),0);
    mergesortpass(vector<int>& arr,)
}

int main(){
    int n=20;
    vector<int> vRank(n,0);
    for(int i=n,j=0;i>0;++j,--i){
        vRank[j]=i;
        cout<<i<<' ';
    }
    cout<<endl;
    mergesort(vRank);
    
    for(const auto& i:vRank){
        cout<<i<<' ';
    }
    
    cout<<endl;
    return 0;
}

标签:temparr,arr,end,int,C++,gap,算法,vector,排序
来源: https://blog.csdn.net/liu502617169/article/details/100024658