最近复习算法的基本知识,主要是看《算法导论》,根据书本中的伪代码写java代码。以下是合并排序的代码:
public class MergeSort {
/**
* @Title: merge
* @Description:将左右两个已排序的子数组合并为一个已排序的数组
* @param A
* @param p
* @param q
* @param r
* @date 2016年3月3日
*/
public static void merge(int[] A, int p, int q, int r) {
// p为左数组的起点下标,q为左数组的终点下标,n1即为左数组的元素个数
int n1 = (q - p) + 1;
// q+1为右数组的起点下标,r为右数组的终点下标,n2即为右数组的元素个数
int n2 = (r - (q + 1)) + 1;
// 两个数组各加入一个哨兵标志值,用于标识无牌,所以数组长度+1
int[] leftArray = new int[n1 + 1];
int[] rightArray = new int[n2 + 1];
// 从原数组拷贝n1个元素到左数组
for (int i = 0; i < n1; i++) {
leftArray[i] = A[p + i];
}
// 从原数组拷贝n2个元素到右数组
for (int i = 0; i < n2; i++) {
// 右数组的起点坐标为q+1
rightArray[i] = A[(q + 1) + i];
}
// 插入哨兵标志,书中的伪代码为正无穷大,使任何数值与其相比均为较小。(该