活用各种数据结构

来源:互联网 发布:linux脚本等待 编辑:程序博客网 时间:2024/05/17 17:55

排序算法


一, 代价为(n^2)的排序算法:
1,插入排序:

template<typename E>void swap(E A[], int first, int second) {    E temp = A[first];    A[first] = A[second];    A[second] = temp;}template<typename E>bool prior(E a, E b) {    if (a < b)        return true;    else        return false;}template <typename E>void inssort(E A[], int n) {    for (int i = 0; i < n; i++)        for (int j = i; (j>0) && prior(A[j], A[j - 1]); j--)            swap(A, j, j - 1);}

2,冒泡排序:

template <typename E>void bubsort(E A[], int n) {    for (int i = 0; i < n - 1; i++) {        for (int j = n - 1; j > i; j--) {            if (prior(A[j], A[j - 1]))                swap(A, j, j - 1);        }    }}

3,选择排序:

template<typename E>void selsort(E A[], int n) {    for (int i = 0; i < n - 1; i++) {        int lowindex = i;        for (int j = n - 1; j > i; j--)            if (prior(A[j], A[lowindex]))                lowindex = j;        swap(A, i, lowindex);    }}

4,Shell排序:

template<typename E>void inssort2(E A[], int n, int incr) {    for (int i = incr; i < n; i += incr)         for (int j = i; (j >= incr) && (prior(A[j], A[j - incr])); j -= incr)            swap(A, j, j - incr);}template<typename E>void shellsort(E A[], int n) {    for (int i = n / 2; i > 2; i /= 2)        for (int j = 0; j < i; j++)            inssort2<E>(&A[j], n - j, i);    inssort2<E>(A, n, 1);}

5,归并排序:

template<typename E>void mergesort(E A[], E temp[], int left, int right) {    if (left == right) return;    int mid = (left + right) / 2;    mergesort<E>(A, temp, left, mid);    mergessort<E>(A, temp, mid + 1, right);    for (int i = i = left; i <= right; i++)        temp[i] = A[i];    int i1 = left;    int i2 = mid + 1;    for (int curr = left; curr <= right; curr++) {        if (i1 == mid + 1)            A[curr] = temp[i2++];        else if (i2 > right)            A[curr] = temp[i1++];        else if (prior(temp[i1], temp[i2]))            A[curr] = temp[i1++];        else A[curr] = temp[i2++];    }}

6,快速排序:

这里写代码片
0 0
原创粉丝点击