五种排序算法

#include <iostream>
using namespace std;

int a[]={3, 2, 5, 1, 4, -3, 24, 7};
int *p = new int[8];

void bubble_sort(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < n - i; j++) {
            if (a[j - 1] > a[j]) {
                int tmp = a[j - 1];
                a[j - 1] = a[j];
                a[j] = tmp;
            }
        }
    }
}

void select_sort(int n) {
    for (int i = 0; i < n; i++) {
        int min = i;
        for (int j = i + 1; j < n; j++) {
            if (a[j] < a[min]) {
                min = j;
            }
        }
        if (min != i) {
            int tmp = a[min];
            a[min] = a[i];
            a[i] = tmp;
        }
    }
}

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

void quick_sort1(int l,int r) {
    int i = l, j = r, x = a[(i + j) / 2];
    do {
        while (x > a[i]) i++;
        while (x < a[j]) j--;
        if (i <= j) {
            int t = a[i];
            a[i] = a[j];
            a[j] = t;
            i++;
            j--;
        }
    } while(i <= j);
    if (i < r) quick_sort1(i,r);
    if (l < j) quick_sort1(l,j);
}

void quick_sort2(int l, int r) {
    if (l < r) {
        int i = l, j = r;
        int x = a[l];
        while (i < j) {
            while (i < j && a[j] >= x) j--;
            if (i < j) a[i++] = a[j];
            while (i < j && a[i] < x) i++;
            if (i < j) a[j--] = a[i];
        }
        a[i] = x;//i = j
        quick_sort2(l, i - 1);
        quick_sort2(i + 1, r);
    }
}

void merge(int first, int mid, int last) {
    int i = first, m = mid;
    int j = mid + 1, n = last;
    int k = 0;
    while(i <= m && j <= n) {
        if (a[i] <= a[j]) {
            p[k++] = a[i++];
        } else {
            p[k++] = a[j++];
        }
    }
    while (i <= m) p[k++] = a[i++];
    while (j <= n) p[k++] = a[j++];
    for (i = 0; i < k; i++) {
        a[first + i] = p[i];
    }
}
void merge_sort(int first, int last) {
    if (first < last) {
        int mid = (first + last) / 2;
        merge_sort(first, mid);
        merge_sort(mid + 1, last);
        merge(first, mid, last);
    }
}

int main()
{
//    bubble_sort(8);
//    select_sort(8);
//    insert_sort(8);
//    quick_sort1(0, 7);
//    quick_sort2(0, 7);
    merge_sort(0, 7);
    
    for (int i = 0; i < 8; i++) {
        cout << a[i] << " ";
    }
    delete []p;
    return 0;
}

冒泡排序、选择排序、插入排序、快速排序、归并排序。晚点再总结。

posted @ 2014-01-09 10:39  xiaovid  阅读(345)  评论(0)    收藏  举报