diff --git a/README.md b/README.md index 8fe026d..08a3314 100644 --- a/README.md +++ b/README.md @@ -94,21 +94,21 @@ ###15个经典基础算法 -* A*寻路算法: 求解最短路径 -* Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的) -* DP (动态规划 dynamic programming) +* Hash +* 快速排序 +* 快递选择SELECT * BFS/DFS (广度/深度优先遍历) * 红黑树 (一种自平衡的`二叉查找树`) -* KMP 字符串匹配算法 +* KMP 字符串匹配算法 +* DP (动态规划 dynamic programming) +* A*寻路算法: 求解最短路径 +* Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的) * 遗传算法 * 启发式搜索 * 图像特征提取之SIFT算法 * 傅立叶变换 -* Hash -* 快速排序 * SPFA(shortest path faster algorithm) 单元最短路径算法 -* 快递选择SELECT - + ## 海量数据处理 diff --git a/算法问题选编/测试代码/print_matrix.c b/算法问题选编/测试代码/print_matrix.c new file mode 100644 index 0000000..68f74fc --- /dev/null +++ b/算法问题选编/测试代码/print_matrix.c @@ -0,0 +1,43 @@ +#include "stdio.h" + +// a[i*rows+j] +void print_matrix_incircle(int *matrix,int rows,int cols,int start){ + int endX = cols-start-1; + int endY = rows-start-1; + + //然后依次打印 上,右,下,左 + for(int i=start;i<=endX;i++){ + printf("%d ",matrix[start*rows+i]); + } + + for(int i=start+1;i<=endY;i++){ + printf("%d ",matrix[i*rows+endX]); + } + + for(int i=endX-1;i>=start;i--){ + printf("%d ",matrix[endY*rows+i]); + } + + for(int i=endY-1;i>start;i--){ + printf("%d ",matrix[i*rows+start]); + } +} + +void print_matrix(int *matrix,int rows,int cols){ + if(matrix==NULL) return ; + if(rows<=0 || cols<=0) return; + + int start = 0; + while(start*2=start;i--){ + printf("\d ",matrix[start*rows+i]); + } + + for(int i=endY-1;i>start;i--){ + printf("\d ",matrix[i*rows+start]); + } +} + +``` + +测试代码见 print_matrix.c @@ -97,14 +144,15 @@ void printArry(int *a,int rows,int columns) -n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, -存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。 + +#### n支队伍比赛的名次 + +n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。 所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中, 比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。....... -胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排, -下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名 +胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名 编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result[n],求出result。