共 31 篇文章 |
|
数组排序(即按某种特定的顺序排列数据,如升序或降序)是最重要的计算应用之一,银行用账号对所有的支票进行能够排序,并根据排序结果准备月底的财务报告,学校学生成绩管理系统用数组排序的方法将考试成绩从高到低进行排名,数组排序方法很多,有直接插入排序、冒泡排序、快速排序、直接选择排序,下面来详细介绍这四种基本的排序方法及其实... 阅39 转2 评0 公众公开 16-08-30 07:26 |
//从末尾开始拷贝是为了重复数据首先出现的排在前面,即稳定排序 for (int i = num - 1; i >= 0; i--) { //包含自己需要减1,重复数据循环回来也需要减1 --pCount[arr[i]-mindata]; pSort[pCount[arr[i]-mindata]] = arr[i]; } //拷贝到原数组 for (int i = 0; i < num; i++) arr[i] = pSort... 阅131 转1 评0 公众公开 16-08-27 18:02 |
初识PageRank算法http://www.datalab.sinaapp.com/?p=1492012一、简单PageRank计算。PageRank算法是基于这样一种背景思想:被随机冲浪者访问越多的网页质量更可能高,而随机冲浪者在浏览网页时主要通过超链接进行页面跳转,因此我们需要通过分析超链接组成的图结构来推算每个网页被访问频率的高低。于是C的PageRank值为:于是,根据前面的PageR... 阅1302 转2 评0 公众公开 16-08-02 15:49 |
此算法同样没有使用第三变量就完成了值的交换,与算术算法比较它显得不好理解,但是它有它的优点即在交换很大的数据类型时,它的执行速度比算术算法快。}以上算法均实现了不借助其他变量来完成两个变量值的交换,相比较而言算术算法和位算法计算量相当,地址算法中计算较复杂,却可以很轻松的实现大类型(比如自定义的类或结构)的交换,而前两... 阅16 转0 评0 公众公开 16-06-11 12:51 |
需要注意的是,简单相加两个子数组的逆序数并不能得出原数组的逆序数,因为原数组还有一部分逆序存在于合并两个子数组的过程中,所以原数组的逆序数是两个子数组逆序数之和加上合并过程中消除的逆序数。具体思路是:将数组划分成两个子数组,使其中一个子数组中的所有元素均小于另一个子数组中的元素(divide);显然,如果一个元素在数组中出... 阅504 转2 评0 公众公开 16-05-23 10:00 |
字符串基数排序。对字符串使用基数排序,以前,我一直觉得:因为字符串的长度不一,无法使用基数排序。首先,将字符串长度当作最低有效位,因为基数排序是从最低有效位开始排的,就先用分配-收集算法对长度做一趟。在排序过程中,可以插入一个codetab,来实现不同的排序准则(例如忽略大小写),如果提供了wchar_t codetab,就按 wchar_t 排序... 阅100 转0 评0 公众公开 16-05-23 06:04 |
有个长度为 n 的 (key,val) 数组 a,其中 key 是 int 类型,并且其值在 [0, n) 之间(前闭后开,包括 0 不包括 n),该数组按 key 是乱序的,但没有重复 key。但是顺时针旋转需要 backward copy,对数组(更 general 一点,是 bidirectional iterator)的 backward copy 很容易,但是对单链表的 backward copy,就比较困难了。int tmp = a[i].v... 阅18 转0 评0 公众公开 16-05-23 05:52 |
// 相当于: int tmpk = a[i].key; Val tmpv = a[i].val; a[i].key = a[j].key; a[i].val = a[j].val; a[j].key = tmpk; a[j].val = tmpv;// 而 前面 j = a[i].key, 于是简化为: Val tmpv = a[i].val; a[i].key = a[j].key; // 从 k-cycle 中删除 j a[i].val = a[j]... 阅35 转0 评0 公众公开 16-05-23 05:52 |
void merge_sort1(int a[],int b[],int l,int r) { if(l >= r) return;} void merge1(int a[],int b[],int l,int m,int r) { int i,j,k;int main() { int i;} void swap(int a[],int i,int j) //交换元素 { int t = a[i]; a[i] = a[j]; a[j] = t; } void print_array(int a[],int n) //打印元素值 { for(int i = 0; i <n; i... 阅12 转0 评0 公众公开 16-05-16 15:56 |
#include <stdio.h>int binsearch(int x, int v[], int n);int find2(int *array,int n,int val) { if (n<=0) { return -1;首先创建一颗二分查找树,我们知道二分查找树的特点是左子树的值都比根节点小,右子树的值都比根节点大,且二分查找树的中序遍历所得到的元素是排好序的。 阅16 转0 评0 公众公开 16-05-16 15:35 |