数据结构和算法
zmx2029
这个作者很懒,什么都没留下…
展开
-
求集合{1, 2, ..., n}的所有子集
package main import "fmt" func subset(x []int) [][]int { y:=[][]int{[]int{}} for i:=0; i<len(x); i++ { if i<len(x)-1 { xx:=subset(x[i+1:]) for j:=0; j<len(xx); j++ { yy:=[]in...原创 2016-03-03 12:21:18 · 855 阅读 · 0 评论 -
将森林转化成二叉树
package main import ( "unsafe" "fmt" ) type TreeNode struct { x int childs []*TreeNode } type Tree TreeNode type BTreeNode struct { x int lchild *BTreeNode rchild *BTreeNode } type BTree ...原创 2016-02-25 21:25:37 · 749 阅读 · 0 评论 -
非二叉树转换成二叉树
package main import ( "unsafe" "fmt" ) type TreeNode struct { x int childs []*TreeNode } type Tree TreeNode type BTreeNode struct { x int lchild *BTreeNode rchild *BTreeNode } type BTree ...原创 2016-02-25 20:36:58 · 617 阅读 · 0 评论 -
Huffman二叉树构建
package main import ( "unsafe" "fmt" ) type TreeNode struct { x int lchild *TreeNode rchild *TreeNode } type Tree TreeNode func initTreeNode(x []int) []*TreeNode { nodes:=make([]*TreeNode,l...原创 2016-02-25 17:13:30 · 414 阅读 · 0 评论 -
构造二叉排序树,然后中序遍历
package main import ( "unsafe" "fmt" "math/rand" "time" ) type TreeNode struct { x int lchild *TreeNode rchild *TreeNode } type Tree TreeNode func appendNode(node *TreeNode,x int) { if x...原创 2016-02-25 11:21:48 · 1740 阅读 · 0 评论 -
二分查找算法
二分查找的时间复杂度O(logn) package main import "fmt" func binarySearch(a []int,x int,s int,t int) int { if s>t { return -1 } m:=(s+t)/2 if x==a[m] { return m } else if x>a[m] { return bina...原创 2016-02-24 23:45:08 · 247 阅读 · 0 评论 -
冒泡排序
冒泡排序的时间复杂度O(n^2) package main import ( "math/rand" "time" "fmt" ) func bubbleSort(a []int) { for i:=1; i<len(a); i++ { for j:=0; j<len(a)-i; j++ { if a[j]<a[j+1] { a[j],a[j+...原创 2016-02-24 23:21:44 · 235 阅读 · 0 评论 -
快速排序算法
一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换; 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换; 5)重复...原创 2016-02-24 23:11:24 · 285 阅读 · 0 评论 -
按照反向斜对角线(右上->左下)的方式打印M行N列的数组arrMatrix[M][N]
package main import "fmt" const M = 3 const N = 3 func print(x [M][N]int) { for i:=N-1; i>=0; i-- { j:=0 k:=i for j<M && k<N { fmt.Print(x[j][k]," ") j++ k++ ...原创 2016-03-09 19:57:35 · 1274 阅读 · 0 评论 -
两元素交换的排列组合问题
现有一个整数序列arrOrigin[N],交换其中任意两个数,求功能得到多少种可能的序列(3,3,3,3无论怎么交换只能得到一个序列) package main import "fmt" func frequency(x []int) map[int]int { y:=make(map[int]int) for i:=0; i<len(x); i++ { y[x[i]]++ ...原创 2016-03-09 17:16:07 · 894 阅读 · 0 评论 -
筷子问题
已知N根筷子的不同长度arrLength[N],要求每位客人拿到的两根筷子长度相同,求最多可邀请的客人数 package main import "fmt" func frequency(x []int) map[int]int { y:=make(map[int]int) for i:=0; i<len(x); i++ { y[x[i]]++ } return y } ...原创 2016-03-09 16:11:11 · 914 阅读 · 0 评论 -
给定一个整数n,以下列方式打印n行
给定一个整数n,以下列方式打印n行,如n=4, 生成的阵列: 1*2*3*4*17*18*19*20 --5*6*7*14*15*16 ----8*9*12*13 ------10*11 package main import "fmt" func print(n int) { s:=2 t:=n*2 k:=(s+t)*n/2 a:=0 for i:=n; i>...原创 2018-09-16 16:20:40 · 2367 阅读 · 0 评论