`
thingkau
  • 浏览: 72546 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

Util.java

阅读更多
放置了一些排序使用的子函数

/**
 * Util.java
 * 
 * 工具类
 * 
 * @author Administrator
 */

public class Util {

	/**
	 * 对换数组a两个下标i和j对应的值.
	 * 
	 * @param a
	 * @param i
	 * @param j
	 */
	public static void swap(int[] a, int i, int j) {

		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;

	}

	/**
	 * 合并数组元素c[l:m]和c[m+1:r]至d[l:r]中.
	 * 前提:c[l:m]和c[m+1:r]必须是有序的
	 * 
	 * @param c
	 * @param d
	 * @param l
	 * @param m
	 * @param r
	 */
	public static void merge(int[] c, int[] d, int l, int m, int r) {

		int i = l, 
			j = m + 1, 
			k = l;

		while ((i <= m) && (j <= r))
			if (c[i] <= c[j])
				d[k++] = c[i++];
			else
				d[k++] = c[j++];

		if (i > m)
			for (int q = j; q <= r; q++)
				d[k++] = c[q];
		else
			for (int q = i; q <= m; q++)
				d[k++] = c[q];

	}
	
	/**
	 * 把数组元素 b[left:right] 复制到 a[left:right]
	 * 前提假设:a,b数组必须等长.
	 * 
	 * @param a
	 * @param b
	 * @param left
	 * @param right
	 */
	public static void copy(int[] a, int[] b, int left, int right){
		for(int i = left; i <= right; i ++)
			a[i] = b[i];
	}

	/**
	 * 合并数组x中大小为s的相邻元素到数组y.
	 * 
	 * 前提:x,y数组长度相等.
	 * 
	 * @param x
	 * @param y
	 * @param s
	 */
	public static void mergePass(int[] x, int[] y, int s) {
		
		int i = 0;
		
		int n = x.length;
		
		while( n - 2 * s > i) {
			
			Util.merge(x, y, i, i + s - 1, i + 2 * s - 1);
			
			i += 2*s;
			
		}
		
		//剩下的元素个数小于2s
		
		//元素个数小于2s大于s个
		if(n - i > s) 
			Util.merge(x, y, i, i + s - 1, n-1);
		
		//元素个数小于s个
		else for(int j = i; j <= n-1; j ++) 
			y[j] = x[j];
		
	}
	
	public static void main(String[] args){
		/*int[] c = new int[]{0,2,3,1};
		
		int[] d = new int[c.length];
		
		
		merge(c,d,0,2,3);
		
		for(int i=0; i<c.length; i++)
			System.out.println(d[i]);
			*/
		System.out.println(1/32);
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics