关于数据结构排序自己的总结和学习

 // 关于数据结构的总结与复习  Coding
//关于快速排序的首先三大简单排序    首选插入排序最为合适
#include <cstdio>
#include <cstdlib>
//#define _OJ_

void
Bubble_sort(int a[], int n)
{
    int i, j, t, change;
    for (i = 0, change = 1; i < n && change; i++) {
        change = 0;
        for (j = 0; j < n - 1 - i; j++) {
            if(a[j] > a[j + 1])
            {t = a[j];  a[j] = a[j + 1];  a[j + 1] = t;   change = 1;}
        }
    }
    printf("i == %d\n", i);
}

void
Select_sort(int a[], int n)
{
    int i, j, t, min;
    for (i = 0; i < n; i++) {
        min = i;
        for (j = i + 1; j < n; j++)
          if(a[j] < a[min])    min = j;
         if(min != i)
            {t = a[i];  a[i] = a[min];  a[min] = t;}
    }
    printf("i1 == %d\n", i);
}

void
Insert_sort(int a[], int n)
//简便插入排序
{
    int i, j, t;
       for (i = 1; i < n; i++) {
          for (j = i; j > 0 && a[j] < a[j - 1]; j--) {
               t = a[j - 1]; a[j - 1] = a[j];   a[j] = t;
        }
    }
}

void
Shell_sort(int a[], int n)
//由插入排序改造的希尔排序
{
    int i, j, t, gap;
    for (gap = n / 2; gap > 0; gap /= 2) {
        for (i = gap; i < n; i += gap) {
            for (j = i; j - gap >= 0 && a[j] < a[j - gap]; j -= gap) {
                t = a[j - gap];    a[j - gap] = a[j];    a[j] = t;
            }
        }
    }
}

void
Quick_sort(int a[], int left, int right)
//由冒泡排序改编的快速排序
{
    int i, j, x;
    i = left;    j = right;    x = a[left];

    if(i < j) {
    while (i < j) {
        while (i < j && x < a[j])
            j--;
        if(i < j)    a[i++] = a[j];

        while (i < j && x > a[i])
            i++;
        if(i < j)    a[j--] = a[i];
    }

    a[i] = x;
    Quick_sort(a, left, i - 1);
    Quick_sort(a, i + 1, right);
  }

}

void
merge_array(int a[], int low, int mid, int high, int tmp[])
{//归并divid and conquer
    int i, j, n, m, k;
    i = low;    j = mid + 1;
    n = mid;    m = high;    k = 0;

    while (i <= n && j <= high) {
        if(a[i] <= a[j])
            tmp[k++] = a[i++];
        else
            tmp[k++] = a[j++];
    }

    while (i <= n)
    tmp[k++] = a[i++];

    while (j <= m)
    tmp[k++] = a[j++];

    for (i = 0; i < k; i++)
     a[low + i] = tmp[i];
}

void
merge_sort(int a[], int low, int high, int tmp[])
{
    if(low < high) {
        int mid = (low + high) / 2;
        merge_sort(a, low, mid, tmp);
        merge_sort(a, mid + 1, high, tmp);
        merge_array(a, low, mid, high, tmp);
    }
}

void
Merge_sort(int a[], int n)
{
    int *tmp;
    tmp = (int*) malloc (100 * sizeof(int));
    merge_sort(a, 0, n - 1, tmp);
    free(tmp);
}


int main(int argc, char const *argv[]) {
#ifndef _OJ_ //ONLINE JUDGE
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
#endif
    

    int i, n;

    int a[100];

    scanf("%d", &n);

    for (i = 0; i < n; i++)
    a[i] = n - i - 1;
    // scanf("%d", &a[i]);

    // Bubble_sort(a, n);

    // Select_sort(a, n);

    // Insert_sort(a, n);

    // Shell_sort(a, n);

    // Quick_sort(a, 0, n - 1);

    // Merge_sort(a, n);

    for (i = 0; i < n; i++)

    printf("%d ", a[i]);

    return 0;
}

 

你可能感兴趣的:(关于数据结构排序自己的总结和学习)