用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

自定义排序 按照给定排序规则排序 规则没给出的按默认排序

2013-03-26 作者: 小蜜锋举报

[java]代码库

/**
 * 按照给定排序规则排序,规则没给出的按默认排序。
 */
public class DiySort {

	public static void main(String[] args) {

		// 待排序数组 w1 b1 Bb Ba 5f 6G kk 1p UG 8y
		char arr[] = { 'w', '1', 'b', '1', 'B', 'b', 'B', 'a', '5', 'f', '6',
				'G', 'k', 'k', '1', 'p', 'U', 'G', '8', 'y' };

		// 排序规则 j<a<G<g<8<r<D<f<U<b<W
		char rule[] = { 'j', 'a', 'G', 'g', '8', 'r', 'D', 'f', 'U', 'b', 'W' };

		int[] p = new int[arr.length]; // arr排序后,每个字符在规则rule中的位置,-1表示默认规则

		for (int i = 0; i < arr.length; i++) {
			p[i] = -1;
		}

		// 临时变量
		char tmp_char;
		int tmp_int;

		// arr排序
		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] > arr[j]) {
					char temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}

		// 分别找到arr中每个字符在rule中的位置
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < rule.length; j++) {
				if (arr[i] == rule[j]) {
					p[i] = j;
				}
			}
		}

		// 按照给定规则rule排序
		for (int i = 0; i < p.length; i++) {
			if (p[i] == -1) {
				continue;
			}
			for (int j = i + 1; j < p.length; j++) {
				if (p[j] == -1) {
					continue;
				}
				if (p[i] > p[j]) {
					tmp_char = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp_char;

					tmp_int = p[i];
					p[i] = p[j];
					p[j] = tmp_int;
				}

			}
		}

		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
	}
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...