- 排序
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));// ——例子思路用进制
}