【算法導論】C++參考源碼之基礎排序

開始閱讀算法導論知識,數學部分的思路沒有深究,只當是瞭解一些算法的原理以及思路,爲的是熟悉算法以及在項目中能夠應用到,

沒有打算對其進行學術研究,下面貼出對應我所寫的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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章