算法導論代碼集(一)

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

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



發佈了80 篇原創文章 · 獲贊 116 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章