常见的几种排序算法

1.插入排序

void insert_sort(int a[], int n)
{
    for (int i = 1; i < n; i++) {
        int temp = a[i], j = i-1;
        for (int j = i - 1; a[j]>temp&&j>=0; j--)
            a[j+1] =  a[j];
        a[j+1] = temp;
    }
}

 也可以用监视哨

2.希尔排序

void ShellSort(int r[], int n)
{
    int d, i, j;
    for (d = n/2; d >= 1; d = d/2) {
        for (i = d+1; i <= n; i++) {
            r[0] = r[i], j = i-d;
            while (j>0&&r[0]<r[j]) {
                r[j+d] = r[j];
                j = j-d;
            }
            r[j+d] = r[0];
        }
    }
}

 3.归并排序

void Merge(int r[], int s, int m, int t)
{
    int i = s, j = m+1, k = s;
    while (i<=m&&j<=t) r1[k++] = r[i]<=r[j] ? r[i++] : r[j++];
    while (i<=m) r1[k++] = r[i++];
    while (j<=t) r1[k++] = r[j++];
    for (i = s; i <= t; i++) r[i] = r[i]; 
} 

>递归法

void Mergesort1(int r[], int s, int t)
{
    if(s==t) return;
    int m = (s+t)/2;
    Mergesort(r, s, m);
    Mergesort(r, m+1, t);
    Merge(r, s, m, t);
}

>迭代法

void MergeSort2(int r[], int n, int h)
{
    for (int h = 1; h < n; h*=2) {
        for (int i = 1; i+2h-1 <= n; i += 2h)
            Merge(r, i, i+h-1, i+2*h-1);
        if (i+h-1<n) Merge(r, i, i+h-1, n);
    }    
}

 4.快速排序

https://blog.csdn.net/zpznba/article/details/83745205

 

https://blog.csdn.net/wangchao701123/article/details/81276913

之后再做分析吧,先把数据结构过了

posted @ 2019-06-25 20:02  sparkyen  阅读(233)  评论(0编辑  收藏  举报