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

微网站建设教程视频教程/公司企业网站制作需要多少钱

微网站建设教程视频教程,公司企业网站制作需要多少钱,沈阳网站建设的价格,周口城乡建设网站一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.3.1 Last edited: 2023.3.1 导读: 帮助算法设计初学者快速掌握算法设计,帮助安静对ABCD……等的重要性排序更清晰&a…

一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com

 Time of completion:2023.3.1
Last edited: 2023.3.1

导读:

帮助算法设计初学者快速掌握算法设计,帮助安静对ABCD……等的重要性排序更清晰!

目录

算法设计与分析—十大经典排序算法二(6--10)

第6关:快速排序

 参考代码

第7关:堆排序

 参考代码

第8关:计数排序

参考代码

第9关:桶排序

 参考代码

第10关:基数排序

 参考代码

作者有言


算法设计与分析——十大经典排序算法二(6--10)

第6关:快速排序

任务描述

本关任务:实现快速排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.快速排序算法。

快速排序算法

快速排序是最常用的一种排序算法,它的特点是速度快、效率高。快速排序的基本思想:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素作为基准值。

  • 算法步骤:

    1. 从数列中挑出一个元素,称为基准pivot

    2. 分区partition操作:比基准值小的元素放在左边,比基准值大的元素放在右边;

    3. 递归recursive:把小于基准值元素的子数列和大于基准值元素的子数列分别递归排序。

编程要求

本关的编程任务是补全右侧代码片段partition_arrayquick_sortBeginEnd中间的代码,具体要求如下:

  • partition_array中,实现数组分区:选定一个基准,左边比基准小,右边比基准大,返回基准所处位置。
  • quick_sort中,实现快速排序:自上而下的递归方法。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 2 3 4 5 6 7 8 9 10

测试输入:

15

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48

预期输出:

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

 参考代码

#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}int partition_array(int *arr ,int l,int r){int a = arr[l];int q = l;int e = r;while(q != e){while(e > q && arr[e]>= a){e--;}while(e > q && arr[q] <= a){q++;}if(q < e){swap(arr[q],arr[e]);}}arr[l]= arr[q];arr[q] = a;return q;
}int* quick_sort(int *arr, int l, int r)
{if(l<r){int a = partition_array(arr ,l,r);quick_sort(arr,l , a);quick_sort(arr, a+1, r);return arr;}
}

第7关:堆排序

任务描述

本关任务:实现堆排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.堆排序算法。

堆排序算法

堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

  • 算法步骤:

    1. 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;

    2. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n]

    3. 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。

编程要求

本关的编程任务是补全右侧代码片段adjustHeapheap_sortBeginEnd中间的代码,具体要求如下:

  • adjustHeap中,实现堆的调整。
  • heap_sort中,构建大顶堆,并调用adjustHeap实现堆的调整。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 2 3 4 5 6 7 8 9 10

测试输入:

15

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48

预期输出:

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

 参考代码

#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void adjustHeap(int *arr, int param1, int j)
{int a = arr[param1]; int child = 2*param1 + 1; while(child < j){if(child + 1 < j && arr[child] < arr[child+1 ])child++;if(a >= arr[child])break;arr[param1] = arr[child];param1 = child;child = 2*child +1;}arr[param1] = a;
}int* heap_sort(int *arr, int n)
{for(int i = n / 2 - 1; i >= 0; i --)adjustHeap(arr, i, n);for(int i = n - 1; i > 0; i --){swap(arr[0],arr[i]);adjustHeap(arr,0, i);}return arr;
}

第8关:计数排序

任务描述

本关任务:实现计数排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.计数排序算法。

计数排序算法

计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

  • 算法步骤:

    1. 找出待排序的数组中最大和最小的元素;

    2. 统计数组中每个值为i的元素出现的次数,存入数组C的第i项;

    3. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);

    4. 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1

编程要求

本关的编程任务是补全右侧代码片段sort_arrayBeginEnd中间的代码,具体要求如下:

  • sort_array中,实现计数排序算法,完成指定输出。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 1

2 1

3 1

4 1

5 1

6 1

7 1

8 1

9 1

10 1

1 2 3 4 5 6 7 8 9 10

参考代码

#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void sort_array(int *arr, int n)
{int max = 0, s;for(s = 0; s < n; s ++)if(max<arr[s])max=arr[s];int min = 0x3f3f3f3f;for(s=0;s<n;s++)if(min>arr[s])min=arr[s];int arrLen = max-min+1;int *jishu = new int[arrLen];fill(jishu, jishu + arrLen, 0);for(int i = 0; i < n; i ++)jishu[arr[i] - min] += 1;int index = 0;for(int i = 0; i < arrLen; i ++)if(jishu[i] != 0)printf("%d %d\n", i + min, jishu[i]);for(int i = 0; i < arrLen; i ++)while(jishu[i] != 0){arr[index] = i+min;jishu[i] --;index ++;}print_array(arr, n);
}

第9关:桶排序

任务描述

本关任务:实现桶排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.桶排序算法。

桶排序算法

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

  • 算法步骤:

    1. 设置一个定量的数组当作空桶;

    2. 遍历输入数据,并且把数据一个一个放到对应的桶里去;

    3. 对每个不是空的桶进行排序;

    4. 从不是空的桶里把排好序的数据拼接起来。

编程要求

本关的编程任务是补全右侧代码片段sort_arrayBeginEnd中间的代码,具体要求如下:

  • sort_array中,实现桶排序算法,并返回升序的数组。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 2 3 4 5 6 7 8 9 10

测试输入:

15

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48

预期输出:

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

 参考代码

#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}int* sort_array(int *arr, int n)
{int max = 0, s;for(s = 0; s < n; s ++)if(max<arr[s])max=arr[s];int min = 0x3f3f3f3f;for(s=0;s<n;s++)if(min>arr[s])min=arr[s];int bucketNum = (max - min) / n + 1;int *bucket = new int[bucketNum * n];int *bucketIndex = new int[bucketNum];fill(bucketIndex, bucketIndex + bucketNum, -1);for(int i = 0; i < n; i ++){int index = arr[i] / (n + 1);bucketIndex[index] ++;bucket[index * n + bucketIndex[index]] = arr[i];}for(int i = 0; i < bucketNum; i ++)if(bucketIndex[i] != -1)sort(bucket + i * n, bucket + i * n + bucketIndex[i] + 1);int index = 0;for(int i=0;i<bucketNum;i++){int a = 0;while(bucketIndex[i]>=0){arr[index] = bucket[i*n + a];a++;index++;bucketIndex[i]--;}}return arr;
}

第10关:基数排序

任务描述

本关任务:实现基数排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.基数排序算法。

基数排序算法

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。

  • 算法步骤:

    1. 取得数组中的最大数,并取得位数;

    2. arr为原始数组,从最低位开始取每个位组成radix数组;

    3. radix进行计数排序(利用计数排序适用于小范围数的特点);

编程要求

本关的编程任务是补全右侧代码片段sort_arrayBeginEnd中间的代码,具体要求如下:

  • sort_array中,实现基数排序算法,并返回升序的数组。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 2 3 4 5 6 7 8 9 10

测试输入:

15

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48

预期输出:

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

 参考代码

#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}int* sort_array(int *arr, int n)
{int max = 0, s;for(s = 0; s < n; s ++)if(max < arr[s])max = arr[s];int *radix = new int[n * 10];fill(radix, radix + n * 10, 0);int *tmparr = new int[n];for(int i = 0; i < n; i ++)tmparr[i] = arr[i];int jishu[10];fill(jishu, jishu + 10, -1);int wei = 0;while(max > 0) max /= 10, wei ++;for(int i=1;i<=wei;i++){int dev = 1;for(int j = 1; j < i; j ++)dev *= 10;for(int j = 0; j < n; j ++){int index = arr[j] / (dev) % (10);jishu[index] ++;radix[index * n + jishu[index]] = arr[j];}int ind = 0;for(int k = 0; k < 10; k ++)if(jishu[k] >= 0){sort(radix + k * n, radix + k * n + jishu[k] + 1);for(int j = 0; j < jishu[k] + 1; j ++)arr[ind] = radix[k * n + j], ind ++;jishu[k] = -1;}fill(radix, radix + n * 10, 0);}return arr;
}

作者有言

如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

http://www.jmfq.cn/news/4947319.html

相关文章:

  • 网站推广优化平台/如何进行网络推广和宣传
  • 做python一个网站/友链交换有什么作用
  • 建设手机网站费用吗/预测2025年网络营销的发展
  • 建设牌官方网站/深圳网站seo优化公司
  • wordpress安装后设置/seo如何优化排名
  • 建设培训学校网站/中国最新军事新闻
  • 章丘营销型网站建设/百度问一问客服人工在线咨询
  • 大兴专业网站建设公司/互联网推广公司排名
  • wordpress更换背景/seo课程排行榜
  • 优秀大校网站/重庆网络seo公司
  • 网站怎么备案啊/北京seo优化外包
  • 海南网站优化公司/网站推广引流
  • 计科专业毕设做网站/企业推广策略
  • web开发技术介绍/seo测试
  • 利用百度云做网站/最近爆发什么病毒感染
  • 常州做的网站的公司网站/北京百度搜索排名优化
  • 美国做3d+h动画的网站/个人永久免费自助建站
  • 做不做我女朋友的网站/促销活动推广方案
  • 推广公众号平台的公司/seo排名培训学校
  • 网站开发技术教程/推广方案策略怎么写
  • 免费做网站软件下载/网站运营策划书
  • 深圳企业专业网站设计/广州网站定制多少钱
  • 地产平面网站/热门seo推广排名稳定
  • 做论坛网站多少钱/电子商务网站建设流程
  • 潍坊市建设一体化平台网站/淘宝指数网站
  • 云南建设厅网站执业注册/淘特app推广代理
  • 手机网站建设请示/发稿媒体平台
  • 网站开发设计思想/网页设计制作网站
  • 保险咨询网站留电话/友情链接怎么连
  • wordpress 会员登录可见/湖南优化公司