每日算法
Jiang_Jinchao的个人博客
踏实工作,快乐生活!
展开
-
【每日算法】二分查找算法
//递归版本 int binarysearch(int arr[], int left, int right, int x) { if (NULL != arr&&left <= right) { int mid; mid = (left + right) / 2; if (arr[mid] = x) return mid; else if (arr[mid] > x)原创 2017-07-23 21:45:06 · 154 阅读 · 0 评论 -
【每日算法】堆排序
1、堆:堆数据结构是一种数组对象。 对于表示堆的数组arr[0…n-1],我们以arr[0]为根,给定某个节点下标i,令其父节点和左右后代节点的下标为: parent(i) = (i-1)/2; left(i) = 2*i+1; right(i) = 2*i+2; 堆分为最大堆和最小堆,上面就是最大堆,特点就是:除根节点以外的每个节点i,都有arr[ parent(i) ]原创 2017-07-23 19:31:57 · 143 阅读 · 0 评论 -
【每日算法】归并排序
思路: 1、分解:将n个元素分成各含n/2个元素的子序列; 2、解决:用归并排序法对两个子序列递归地排序; 3、合并:合并两个已排序的子序列以得到排序结果。 归并排序的时间复杂度为O(n logn),空间复杂度为O(n)。归并排序是稳定的 代码: void mergesort(int arr[], int l, int r) { if (arr == NULL || l原创 2017-07-23 17:37:36 · 157 阅读 · 0 评论 -
【每日算法】插入排序&选择排序&冒泡排序
void insertsort(int arr[], int length) { if (arr = NULL || length <= 0) return; for (int i = 1; i < length; i++) { int key = arr[i];//待插入的元素 int j = i - 1; while (j >= 0 && arr[j] > key)原创 2017-07-23 16:47:14 · 207 阅读 · 0 评论