開始閱讀算法導論知識,數學部分的思路沒有深究,只當是瞭解一些算法的原理以及思路,爲的是熟悉算法以及在項目中能夠應用到,
沒有打算對其進行學術研究,下面貼出對應我所寫的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