《算法笔记》——第四章(JAVA)

  1. 排序

             a.选择排序。

             

	/**
	 * 选择排序
	 */
	static void selectionSort() {
		Integer[] a = { 1, 5, 9, 6, 122, 496, 154, 185 };
		for (int i = 0; i < a.length; i++) {
			int k = i;
			for (int j = i; j < a.length; j++) {
				if (a[j] < a[k]) {
					k = j;
				}
			}
			int temp = a[i];
			a[i] = a[k];
			a[k] = temp;
		}
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
	}

            b.插入排序

      2.散列(hash)

/**
	 * 散列:算法思想之一。 浓缩的话就是:“将元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素。” 
	 * 对我来说就是相当于之前的做压缩文件。
	 * 散列函数H,元素未转换为key转换后为H(key)
	 * 书中列举的方法大概有
	 * 直接定址(恒等变换——将key作为下标或者线性变换(H(key)=a*key+b)), 
	 * 平方取中(取中间若干值为key(很少用)),
	 * 除留余数(是指把Key除以一个数mod得到的余数作为Hash值得方法(H(key)=key%mod(表的长度不能小于mod不然越界BUG欢迎你)))
	 * 但是除留余数这个容易有冲突。
	 * 解决冲突可以用三种办法 
	 * 1.线性探查法:
	 * 利用线性的特征来查看,如果H(key)有了那么查看H(key)+1直到边界或者成功插入。
	 * 但是这个看着都很麻烦。 有扎堆现象,一定程度上也会降低效率
	 * 2.平方探查法 
	 * 即查看是用H(key)+1^2,H(key)-1^2,H(key)+2^2,H(key)-2^2`````
	 * 如果大于表长就取模,小于零就不停往上加表长直到出现的数为非负数。 
	 * 3.链地址法 
	 * 组成单链表范围直接设成link[0]~link[表长-1]
	 */

	/**
	 * 小例子:将字符串“A~Z"转换成整数。
	 */
	static int useSystemToInt(String tag) { // 利用系統方法在線偷懶_偷懶報錯被迫重写- -臥槽- -越界了什麼鬼當場笑死
		char[] charArray = tag.toCharArray();
		int a = 0;
		for (char c : charArray) {
			System.out.println((int) c);
			a = a * (charArray.length - 1) + (int) c;
		}
		return a;
	}

	/**
	 * useSystemToInt()這個方法原文是用的進制即将A~Z作为0~25的26进制, 
	 * 但是由于我懒我直接变成了线性操作。 直转Int会越界,瑟瑟发抖
	 * 
	 */
	public static void main(String[] args) {
		String tag = "QWER";
		System.out.println(useSystemToInt(tag));// ——例子思路用进制
	}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值