【C++单排之路】 --简单排序算法,插入与归并

菜小弟的修仙路。

插入排序

/**
 * 直接插入排序算法,原理如同抓扑克
 * */
#include <iostream>
using namespace std;
int main(){
    int array[5] = {5,4,2,7,1};
    for(int i=1;i<5;i++){
        int temp = array[i];
        int j=i-1;
        for(;(j>=0)&&(array[j]>temp);j--){
            array[j+1] = array[j];
        }
        array[j+1] = temp;
    }
    for(int i=0;i<5;i++){
        cout<<array[i]<<" ";
    }
    system("pause");
    return 0;
}

归并排序

/**
 * 归并排序,分治算法,即把两个已排序的数组合并为一个数组
 * 有一个小注意点,把两个有序数组归并时,在两个数组的末尾添加一个“无穷大”的元素,作为哨兵,这样就不用每次都判断是否有一个数组归并结束了
 * */
#include<iostream>
#define MaxN 100;
using namespace std;

void merge(int *a,int p,int q,int r){
    int n1 = q-p+1;
    int n2 = r-p;
    int L[n1+1];
    int R[n2+1];
    for(int n=0;n<n1;n++){
        L[n] = a[p+n];
    }
    for(int n=0;n<n2;n++){
        R[n] = a[q+n+1];
    }
    L[n1] = MaxN;
    R[n2] = MaxN;
    int i=0;int j=0;
    for(int n=p;n<=r;n++){
        if(L[i]<=R[j]){
            a[n] = L[i];
            i++;
        }else{
            a[n] = R[j];
            j++;
        }
    }

}
void Sort(int *a,int s,int e){
    if(s==e){
        return;
    }
    Sort(a,s,(s+e)/2);
    Sort(a,(s+e)/2+1,e);
    merge(a,s,(s+e)/2,e);
}
int main(){
    int array[5] = {5,4,2,7,1};
    Sort(array,0,4);
    //merge(array,0,2,4);
    for(int i=0;i<5;i++){
        cout<<array[i]<<"   ";
    }
    cout<<endl;
    system("pause");
    return 0;
}




猜你喜欢

转载自blog.csdn.net/qq_37935670/article/details/80017076