【算法导论】C++参考源码之基础排序

来源:互联网 发布:知乎过目不忘的名字 编辑:程序博客网 时间:2024/05/21 14:27

开始阅读算法导论知识,数学部分的思路没有深究,只当是了解一些算法的原理以及思路,为的是熟悉算法以及在项目中能够应用到,

没有打算对其进行学术研究,下面贴出对应我所写的C++源码,可以直接在VS2008编译器上运行。

以下代码是是插入排序,合并排序(归并排序),冒泡排序

#include <iostream>using namespace std;void insert_sort(int arry[], int size){int key;int i;for (int j = 1; j < size; ++j){key = arry[j];i = j - 1;while (i > -1 && arry[i] > key){arry[i+1] = arry[i];i = i - 1;}arry[i+1] = key;}}void merge(int A[], int p, int q, int r){int n1 = q - p + 1;int n2 = r - q;int i, j;int L[10];int R[10];for (i = 0; i < n1; ++i){L[i] = A[p + i];}for (j = 0; j < n2; ++j){R[j] = A[q + j + 1];}L[n1] = 0xFFFF;R[n2] = 0xFFFF;i = 0;j = 0;for (int k = p; k <= r; ++k){if (L[i] <= R[j]){A[k] = L[i];++i;}else{A[k] = R[j];++j;}}}void merge_sort(int A[], int p, int r){if (p < r){int q = (p + r) / 2;merge_sort(A, p, q);merge_sort(A, q+1, r);merge(A, p, q, r);}}void bubble_sort(int A[], int size){for (int i = 0; i < size; ++i){for (int j = size - 1; j > i; --j){if (A[j] < A[j-1]){swap(A[j], A[j-1]);}}}}int main(){int arry[] = {5, 2, 4, 6, 1, 3, 7, 9, 8};//int arry[] = {2, 4, 6, 1, 3, 5};int size = sizeof(arry) / sizeof(arry[0]);//insert_sort(arry, size);merge_sort(arry, 0, size-1);//bubble_sort(arry, size - 1);for (int i = 0; i < size; ++i){cout << arry[i] << endl;}return 0;}

第一次写,暂时没有发现有BUG,可以进行参考,发现BUG的同学可以在下方评论。


冒泡写错了~~~,我现在修正回来了 ——2013-8-17