您的位置:首页 > 编程语言 > C语言/C++

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

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

没有打算对其进行学术研究,下面贴出对应我所写的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论 C++ 排序