算法导论学习笔记(Java实现)

Ch2_InsertSort
package algorithms;

// 插入排序
public class Ch2_InsertSort
{
	public void insertsort(int[] data, int data_length)
	{
		for (int j = 2; j <= data_length; j++)
		{
			int key = data[j];
			int i = j - 1;
			for (; i > 0 && data[i] > key; i--)
				data[i + 1] = data[i];
			data[i + 1] = key;
		}
	}

	public static void main(String[] args)
	{
		int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 }; // 数组从序号1开始,0号位置放一个占位数字0,输出数组时,忽略0号位置,从1开始输出
		Ch2_InsertSort sort = new Ch2_InsertSort();
		sort.insertsort(data, data.length - 1);
		for (int temp = 1; temp <= data.length - 1; temp++)
		{
			System.out.print(data[temp]);
			System.out.print("  ");
		}
	}
}

Ch2_MergeSort
package algorithms;

// 利用分治法(即递归)实现合并排序
public class Ch2_MergeSort
{
	public void mergesort(int[] data, int p, int r)
	{
		if (p < r)
		{
			int q = (p + r) / 2;
			mergesort(data, p, q);
			mergesort(data, q + 1, r);
			merge(data, p, q, r);
		}
	}

	public void merge(int[] data, int p, int q, int r)
	{
		int n1 = q - p + 1;
		int n2 = r - q;
		int[] L = new int[n1 + 1];
		int[] R = new int[n2 + 1];
		for (int i = 1; i <= n1; i++)
			L[i] = data[p + i - 1];
		for (int i = 1; i <= n2; i++)
			R[i] = data[q + i];
		for (int k = p, i = 1, j = 1; k <= r; k++)
		{
			if (i <= n1 && j <= n2)
				data[k] = (L[i] < R[j] ? L[i++] : R[j++]);
			else
				data[k] = (i <= n1 ? L[i++] : R[j++]);
		}
	}

	public static void main(String[] args)
	{
		Ch2_MergeSort sort = new Ch2_MergeSort();
		int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 }; // 数组从序号1开始,0号位置放一个占位数字0,输出数组时,忽略0号位置,从1开始输出
		sort.mergesort(data, 1, data.length - 1);
		for (int temp = 1; temp <= data.length - 1; temp++)
		{
			System.out.print(data[temp]);
			System.out.print("  ");
		}
	}
}

Ch2_Exercise2_3_4

package algorithms;

// 递归版本的插入排序
public class Ch2_Exercise2_3_4
{
	public void insertsort_recrusive(int[] data, int p, int r)
	{
		if (r > 2)
			insertsort_recrusive(data, 1, r - 1);
		int key = data[r];
		int i = r - 1;
		for (; data[i] > key && i >= 1; i--)
			data[i + 1] = data[i];
		data[i + 1] = key;
	}

	public static void main(String[] args)
	{
		int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 };
		Ch2_Exercise2_3_4 sort = new Ch2_Exercise2_3_4();
		sort.insertsort_recrusive(data, 1, data.length - 1);
		for (int i = 1; i < data.length - 1; i++)
		{
			System.out.print(data[i]);
			System.out.print("  ");
		}
	}
}

Ch2_Exercise_2_3_7


package algorithms;

public class Ch2_Exercise_2_3_7
{
	public boolean findsum(int[] data, int x)
	{
		for (int i = 1; i < data.length - 1; i++)
			for (int j = i + 1; j < data.length - 1; j++)
				if (data[i] + data[j] == x)
					return true;
		return false;
	}

	public static void main(String[] args)
	{
		int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 };
		Ch2_Exercise_2_3_7 sum=new Ch2_Exercise_2_3_7();
		int x=6;
		if(sum.findsum(data, x))
			System.out.println("exist");
		else
			System.out.println("not exist");
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值