算法导论代码集(一)

算法一:插入排序(增量模式)

NOTE THAT :在同等的输入规模情况下,插入排序依据初始输入的不同,其运行时间会有差异(分析:最佳情况、最坏情况、平均情况)。
#include "iostream"
using namespace std;

// date : 2017.12.18   By:dlphay 
// INSERTION_SORT_DLY

int main()
{
	int A[6] = {31, 41, 59, 26, 41, 58};
	int i = 0;
	int j = 0;
	int value = 0;

	for (i = 0; i < 6; i++)
	{
		cout << A[i] << "\t" << endl;
		if (i == 5)  cout << "\n" << endl;
	}
	for (j = 1; j < 6; j++)
	{
		value = A[j];
		i = j - 1;
		// sort 
		while ((value < A[i]) && (i >= 0))
		{
			A[i + 1] = A[i];
			i--;
		}
		A[i+1] = value;
	}
	for (i = 0; i < 6; i++)
	{
		cout << A[i] << "\t" << endl;
		//if(i == 5)  cout <<"\n" << endl;
	}

	system("pause");
	return 0;
}
#include "iostream"
using namespace std;

// date : 2017.12.18   By:dlphay 
// INSERTION_SORT_DLY

int main()
{
	int A[6] = {31, 41, 59, 26, 41, 58};
	int i = 0;
	int j = 0;
	int value = 0;

	for (i = 0; i < 6; i++)
	{
		cout << A[i] << "\t" << endl;
		if (i == 5)  cout << "\n" << endl;
	}
	for (j = 1; j < 6; j++)
	{
		value = A[j];
		// sort 
		for (i = j - 1; (i >= 0) && (A[i] > value); i--)
		{
			A[i+1] = A[i];
		}
		A[i + 1] = value;

	}
	for (i = 0; i < 6; i++)
	{
		cout << A[i] << "\t" << endl;
	}

	system("pause");
	return 0;
}

算法二:归并排序(分治模式)

NOTE THAT : 归并排序:利用归并的思想实现的排序方法,通过对问题进行:分解-解决-合并来进行,分治法 将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。
#include "iostream"
using namespace std;

// date : 2017.12.19   By:dlphay 
// MERGE_SORT_DLY

//治
void MERGE(int *data, int p, int q, int r)
{
	int n = r - p + 1;
	int k = p; //左端点
	int *TEMP_ARR = (int *)malloc(sizeof(int)*n);
	int left_END = q;
	int right_END = r;
	int temp_pos = 0;
	q = q +1;
	while ((p <= left_END) && (q <= right_END))
	{
		if (data[p] <= data[q])
		{
			TEMP_ARR[temp_pos++] = data[p++];
		}
		else
		{
			TEMP_ARR[temp_pos++] = data[q++];
		}
	}
	while (p <= left_END)
	{
		TEMP_ARR[temp_pos++] = data[p++];
	}
	while (q <= right_END)
	{
		TEMP_ARR[temp_pos++] = data[q++];
	}
	temp_pos = 0;
	int i;
	for ( i = k; i <= r; i++)
	{
		data[i] = TEMP_ARR[temp_pos++];
	}
}

//分
void MERGE_SORT(int *A, int p, int r)
{
	if (p > r)
	{
		return;
	}
	if (r > p)
	{
		int q = (p + r) / 2;
		MERGE_SORT(A, p, q);
		MERGE_SORT(A, q + 1, r);
		MERGE(A, p, q, r);
	}

}

void PRINT_ARR(int *A, int n)
{
	int i;
	for (i = 0; i < n; i++)
	{
		cout << A[i] << endl;
		if(i == (n-1))  cout << "\n" << endl;
	}
}

int main()
{
	int B[8] = { 50, 10, 20 ,15, 30, 60 ,90 ,5 };
	PRINT_ARR(B, 8);
	MERGE_SORT(B, 0, 7);
	PRINT_ARR(B, 8);

	system("pause");
	return 0;
}



发布了81 篇原创文章 · 获赞 118 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/dlphay/article/details/78833659