数据结构与算法的重要性,是众所周知的,作为开发人员都想攻克它,但大部分人坚持一下都放弃了。可能是因为知识点太多、不知从何开始学起,也可能是没找对学习方法,也可能是没找到好的学习资料。如果你还在迷茫中,相信本课程能够帮到你,是你彻底掌握数据结构与算法的美好开始。
LZW 压缩算法
string = "thisisthe"
dictionary = {chr(i):i for i in range(97,123)}
last = 256
p = ""
result = []
for c in string:
pc = p+c
if pc in dictionary:
p = pc
else:
result.append(dictionary[p])
dictionary[pc] = last
last += 1
p = c
if p != '':
result.append(dictionary[p])
print(result)
以上代码运行结果为:
[116, 104, 105, 115, 258, 256, 101]
LZW 解压缩算法
dictionary = {i:chr(i) for i in range(97,123)}
last = 256
arr = [97, 97, 98, 256, 258, 257, 259]
result = []
p = arr.pop(0)
result.append(dictionary[p])
for c in arr:
if c in dictionary:
entry = dictionary[c]
result.append(entry)
dictionary[last] = dictionary[p] + entry[0]
last += 1
p = c
print(''.join(result))
以上代码运行结果为:
aabaabaabaab
一、概述:
本文给出常见的几种排序算法的原理以及 Java 实现,包括常见的简单排序和高级排序算法,以及其他常用的算法知识。
简单排序:冒泡排序、选择排序、插入排序
高级排序:快速排序、归并排序、希尔排序
相关算法知识:划分、递归、二分查找
二、冒泡排序:
(1)原理:
1、从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置。
2、指针由第一个数据移向第二个数据,第二个数据与第三个数据相比较,如果第三个数据小于第二个数据,则交换两个数据的位置。
3、依此类推,完成第一轮排序。第一轮排序结束后,最大的元素被移到了最右面。
4、依照上面的过程进行第二轮排序,将第二大的排在倒数第二的位置。
5、重复上述过程,没排完一轮,比较次数就减少一次。
(2)例子:
待排序数据:7, 6, 9, 8, 5,1
第一轮排序过程:
指针先指向7,7和6比较,6<7,交换6和7的位置,结果为:6,7,9,8,5,1
指针指向第二个元素7,7和9比较,9>7,不用交换位置,结果仍为:6,7,9,8,5,1
指针指向第三个元素9,比较9和8,8<9,交换8和9的位置,结果为:6,7,8,9,5,1
指针指向第四个元素9,比较9和5,5<9,交换5和9,结果为:6,7,8,5,9,1
指针指向第五个元素9,比较9和1,1<9,交换1和9的位置,结果为6,7,8,5,1,9
第一轮排序结束后,最大的数字9被移到了最右边。
进行第二轮排序,过程同上,只是由于最大的9已经放在最右边了,因此不用在比较9了,少了一次比较,第二轮结束的结果为:6,7,5,1,8,9
第三轮结果:6,5,1,7,8,9
第四轮比较结果:5,1,6,7,8,9
第五轮比较结果:1,5,6,7,8,9
最终排序结果为:1,5,6,7,8,9,由上可知N个数据排序,需要进行N-1轮排序;第i轮排序需要的比较次数为N-i次。
(3)编码思路:
需要两层循环,第一层循环i表示排序的轮数,第二层循环j表示比较的次数。
(4)代码实现:
实例
package com.test.insertsort;
/**
* 选择排序
* @author Administrator
*
*/
public class ChooseSort {
private int[] array;
private int length;
public ChooseSort(int[] array){
this.array = array;
this.length = array.length;
}
/**
* 打印数组中的所有元素
*/
public void display(){
for(int i: array){
System.out.print(i+" ");
}
System.out.println();
}
/**
* 选择排序算法
*/
public void chooseSort(){
for(int i=0; i
链接:https://pan.baidu.com/s/1O8gMQOCvyKh7xxkOm4APkw
提取码:8ie5
复制这段内容后打开百度网盘手机App,操作更方便哦
有不懂的一起交流学习哦,vx:IT_Promise