程序员面试笔试宝典
xiaxzhou
这个作者很懒,什么都没留下…
展开
-
【算法题】判断二叉树平衡性
由平衡二叉树的定义可知,每个节点的左右子树的高度差要小于等于1 可以用递归实现,在遍历二叉树各节点事,若节点的左右子树的深度之差不超过1,则是平衡二叉树。 int getDepth(Tree*root){ if (root == NULL) return 0; int leftDepth = getDepth(root->left); int rightDep原创 2017-06-04 21:53:45 · 499 阅读 · 0 评论 -
【算法题】归并排序
void Merge(int* array, int left, int mid, int right) { int len_l = mid - left+1; int len_r = right - mid; int * array_l = new int[len_l]; int * array_r = new int[len_r]; for (auto i原创 2017-06-02 11:51:53 · 456 阅读 · 0 评论 -
【算法题】希尔排序
希尔排序是基于插入排序的两个性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 void InsertSort(int *array,int left,int right)//插入排序 { if (left>=right) { return; }原创 2017-06-02 16:12:18 · 471 阅读 · 0 评论 -
【算法题】二叉树非递归遍历
先序遍历:入栈时访问 中序遍历:出栈时访问 后续遍历:第二次出栈时访问 //非递归前序遍历 void preorderTraversal(TreeNode *root, vector<int> &path) { stack<TreeNode *> s; TreeNode *p = root; while(p != NULL || !s.empty()) {原创 2017-06-04 11:09:34 · 296 阅读 · 0 评论 -
【算法题】快速排序
int partition(int* array, int left, int right) { if (array==nullptr||left>=right) { return left; } int k = array[right]; int mid = left - 1; for (auto i = left; i < righ原创 2017-06-02 15:07:20 · 341 阅读 · 0 评论 -
【算法题】双向冒泡排序
void func(int* array,int len) { if (array == NULL || len<=1) { return; } int left = -1; int right = len; while (left<right) { left++; right--;原创 2017-06-01 22:23:54 · 892 阅读 · 0 评论 -
【算法题】冒泡排序
void func(int* array,int len) { if (array == NULL || len<=1) { return; } for (auto i = 0; i < len;++i) { for (auto j = len-1; j > i;--j) { if (ar原创 2017-06-01 22:01:16 · 313 阅读 · 0 评论 -
【算法题】插入排序
void func(int* array,int len) { if (array == NULL || len<=1) { return; } for (auto i = 1; i < len;++i) { for (auto j = i; j >= 1;--j) { if (array原创 2017-06-01 21:47:35 · 338 阅读 · 0 评论 -
【算法题】选择排序
选择排序原创 2017-05-30 12:10:00 · 394 阅读 · 0 评论 -
【数据结构】 堆
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)void MakeHeap(int * array, int len) { for (auto i = len - 1; i >= 1;--i) { if (array[(i-1)/2] < array[i]) { std::swap(array[i / 2], a原创 2017-06-02 18:01:30 · 295 阅读 · 0 评论
分享