当前位置: 首页 > wzjs >正文

武汉网站关键词排名seo免费优化网站

武汉网站关键词排名,seo免费优化网站,正规的金融行业网站开发,做全国性的app网站推广多少1. 堆排序说起排序,我们并不陌生,前面的冒泡排序就是其中之一,现在介绍一种新的排序方法 -- 堆排序。思路分析:第1步:建立有效的堆(什么叫有效的堆?-- 就是上节我们说的大根堆/小根堆&#xff0…

1. 堆排序

说起排序,我们并不陌生,前面的冒泡排序就是其中之一,现在介绍一种新的排序方法 -- 堆排序。

思路分析:

第1步:建立有效的堆(什么叫有效的堆?-- 就是上节我们说的大根堆/小根堆);

第2步:进行升序和降序操作。

void swap(int* x, int* y)
{int tmp = *x;*x = *y;*y = tmp;
}//向下调整算法
void AdjustDown(int* arr, int parent, int n)
{//注意前面调整为小堆,这里删除也是调整小堆--要保持唯一int child = 2 * parent + 1;while (child < n){//调整为大堆if (arr[child] < arr[child + 1] && child + 1 < n){child++;//找大孩子}if (arr[child] > arr[parent]){swap(&arr[child], &arr[parent]);parent = child;child = 2 * parent + 1;}else{break;}}
}//堆排序
void Heapsort(int* arr, int n)
{//int parent = (n - 1 - 1) / 2;//找每一棵子树for (int i = (n - 1 - 1) / 2; i >= 0; i--){//进行有效堆调整AdjustDown(arr, i, n);}//如果进行向上调整算法;每插入一个数据就要进行堆调整//for(int i = 0; i < n; i++)//{//AdjustUp(arr, i); // 具体使用方法见上节//}int end = n - 1;while (end > 0){//堆顶和最后一个孩子交换swap(&arr[0], &arr[end]);//注意:交换后,孩子--end--;AdjustDown(arr, 0, end);}
}

 

2. Top-K问题

说白了就是让我们找出前K个最大值/最小值。

 前面我们刚了解了堆排序可以得到最大/小值,那么这里我们能不能用堆排序来解决问题呢?

答案当然是可以的。

我们要找到前K个最大值,那是不是跟1个值比较,只要比它大,我就存放数据。

这里存放数据我们又得需要一个数组了。

既然如此,我们通过建堆来试试:

如果建大堆,只要比堆顶小,与堆顶交换数据 -- 得到前K个最小值;

如果建小堆,只要比堆顶大,与堆顶交换数据 -- 得到前K个最大值;

再将余下的N-K个数据和堆顶比较,满足要求和堆顶交换数据

这里就有人疑惑了,为啥我不建大堆和余下数据比较,这不也能找到前K个最大值吗?

NONONO!!这时你犯了错误!!

注意这里我们要得到前K个最大值,堆顶的值如果小于m,此时堆顶和m发生交换,这时你原来堆顶的最大值就相当于被删了!!

那你打印的时候就会发现,数组只有第一个是最大/小值!!!!!千万要注意!!

void swap(int* x, int* y)
{int tmp = *x;*x = *y;*y = tmp;
}//向下调整算法
void AdjustDown(int* arr, int parent, int n)
{int child = 2 * parent + 1;while (child < n){//调整为小堆if (arr[child] > arr[child + 1] && child + 1 < n){child++;//找大孩子}if (arr[child] < arr[parent]){swap(&arr[child], &arr[parent]);parent = child;child = 2 * parent + 1;}else{break;}}
}//要找出前K个最大值的前提是得有数据
void CreatData()
{//造数据int n = 10000;srand(time(0));const char* file = "data.txt";//创建一个文件FILE* fin = fopen(file, "w");//打开文件,写模式if (fin == NULL){perror("fopen fail!");exit(1);}for (int i = 0; i < n; i++){int x = (rand() + i) % 10000;fprintf(fin, "%d\n", x);//这里是把数据输入到文件file里}fclose(fin);
}
//找TOP-K问题
void Find()
{//找前K个数据int k = 0;printf("请输入k:");scanf("%d", &k);//打开文件读取数据const char* file = "data.txt";FILE* fout = fopen(file, "r");if (fout == NULL){perror("fopen fail!");exit(1);}int* tmp = (int*)malloc(sizeof(int) * k);if (tmp == NULL){perror("malloc fail!");exit(1);}//读取前K个数据for (int i = 0; i < k; i++){fscanf(fout, "%d", &tmp[i]);}//读完数据开始键堆并调整for (int i = 0; i < k; i++){AdjustDown(tmp, 0, k);}int num = 0;//遍历余下的数据进行比较while (fscanf(fout, "%d", &num) != EOF){//和堆顶进行比较if (num > tmp[0]){tmp[0] = num;//堆调整AdjustDown(tmp, 0, k);}}//打印tmpfor (int i = 0; i < k; i++){printf("%d  ", tmp[i]);}//注意文件结束操作后,要关闭文件!!fclose(fout);
}

http://www.dtcms.com/wzjs/56915.html

相关文章:

  • 免费公司网站主页模板最近中国新闻热点大事件
  • 免费网站空间 - 百度网站推广的100种方法
  • 西安哪些做网站的公司好杭州产品推广服务公司
  • 织梦网站默认密码忘记手机网站排名优化软件
  • 企业建立网站需要提供什么上海seo培训中心
  • 简单小网站百度网页游戏
  • 单招网是哪个网站制作公司做的百度一下你知道主页官网
  • 2019个人建设网站百度ocpc如何优化
  • 网站app制作教程南通百度网站快速优化
  • 买服务器做网站主机超级优化
  • 前端开发 网站建设扬州网络推广公司
  • 自己在线制作logo免费生成器搜索引擎优化的技巧有哪些
  • IT男为女朋友做的求婚网站网站优化公司哪个好
  • 北京网站建设方案nba最新消息新闻
  • 长沙 网站设计 公司免费建站平台哪个好
  • 海珠区网站建设网站怎样优化关键词好
  • 漳州博大网站建设搜索排名优化软件
  • 电子商务网站建设与维护展望百度快速收录开通
  • 免费b2b网站如何做排名优化seo是什么
  • 用java做信息发布网站百度竞价推广效果好吗
  • 网站建设价格制定的方法网上培训机构
  • 网站不用了 怎么关闭吗淘宝标题优化网站
  • 哪个网站可以做片头百度怎么找人工客服
  • 网站建设教程微云网盘网站权重优化
  • 信访举报 网站 建设 情况谷歌代运营
  • 定制网站建设公司策划书百度收录查询入口
  • 做网站和做app有什么不同网站开发需要哪些技术
  • 以家乡为主题做网站中国十大小说网站排名
  • 网站设计的国际专业流程包括网络优化工程师有多累
  • 酒店网站素材国外seo网站