算法导论代码集(一)

14 篇文章 0 订阅
6 篇文章 0 订阅

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

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;
}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值