商业新闻

商业新闻
首页 > 新闻资讯 > 商业新闻 > 正文内容

关键词排名统计系统源码(关键词统计软件)

时间:2023-11-23 信途科技商业新闻

为了让大家掌握多种排序方法的基本思想,本篇文章带着大家对数据结构的常用七大算法进行分析:包括直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序等,并能够用高级语言实现。

希望通过对这些算法效率的比较,加深对算法的理解。

①插入排序

②折半插入排序

③选择排序

④起泡排序

⑤快速排序

⑥希尔排序

⑦堆排序

⑧归并排序

排序算法的分析图解:

用随机数(介于1-100)产生10个待排序数据元素的关键字值)。

① 采用直接插入排序和希尔排序方法对上述待排数据进行排序并输出序后的有序序列;

② 采用冒泡排序、快速排序方法对上述待排数据进行排序并输出序后的有序序列;

③ 采用简单选择排序、堆排序方法对上述待排数据进行排序并输出序后的有序序列;

④ 采用归并排序方法对上述待排数据进行排序并输出排序后的有序序列;

代码分析

头文件:

#include<cstdio>#include<iostream>#include<cstdlib>#define MAXSIZE 100using namespace std;typedef int KeyType;typedef int InfoType;typedef struct{ KeyType key; InfoType otherinfo;}RedType;typedef struct{ RedType r[MAXSIZE+1]; int length;}SqList;

①插入排序

void InsertSort(SqList &L){ int i,j,a=0,b=0; for(i=1;i<=L.length;++i) { if(L.r[i].key<L.r[i-1].key) { L.r[0]=L.r[i]; L.r[i]=L.r[i-1]; a++; } for(j=i-2;L.r[0].key<L.r[j].key;--j) L.r[j+1]=L.r[j];b++; L.r[j+1]=L.r[0]; } cout<<"比较次数:"<<a<<"移动次数:"<<b<<endl;}

②折半插入排序

void BInsertSort(SqList &L){ int low,high,m; for(int i=2;i<=L.length;++i) { L.r[0]=L.r[i]; low=1;high=i-1; while(low<=high) { m=(low+high)/2; if(L.r[0].key<L.r[m].key)high=m-1; else low=m+1; } for(int j=i-1;j>=high+1;--j) L.r[j+1]=L.r[j]; L.r[high+1]=L.r[0]; }}

③选择排序

void SelectSort(SqList &L){ int j,k; for(int i=1;i<=L.length;++i) { k=i; for(j=i+1;j<=L.length;j++) if(L.r[j].key<L.r[k].key)k=j; if(k!=i) { L.r[0].key=L.r[i].key; L.r[i].key=L.r[k].key; L.r[k].key=L.r[0].key; } }}

④起泡排序

void BubbleSort(SqList &L){ int i,j; for(i=1;i<=L.length;++i) { for(j=1;j<L.length-i+1;++j) { if(L.r[j+1].key<L.r[j].key) { L.r[0].key=L.r[j].key; L.r[j].key=L.r[j+1].key; L.r[j+1].key=L.r[0].key; } } }}

⑤快速排序

int Partition(SqList &L,int low,int high){ L.r[0]=L.r[low]; KeyType pivotkey=L.r[low].key; while(low<high) { while(low<high&&L.r[high].key>=pivotkey)--high; L.r[low]=L.r[high]; while(low<high&&L.r[low].key<=pivotkey)++low; L.r[high]=L.r[low]; } L.r[low]=L.r[0]; return low;}void QSort(SqList &L,int low,int high){ if(low<high) { int pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); }}

⑥希尔排序

void ShellInsert(SqList &L,int dk){ int i,j; for(i=dk+1;i<=L.length;++i) { if(L.r[i].key<L.r[i-dk].key){L.r[0]=L.r[i]; for(j=i-dk;j>0&&L.r[0].key<L.r[j].key;j-=dk) L.r[j+dk]=L.r[j]; L.r[j+dk]=L.r[0]; } }}void ShellSort(SqList &L,int dlta[],int t){ for(int k=0;k<t;++k) ShellInsert(L,dlta[k]);}

⑦堆排序

typedef SqList HeapType;void HeapAdjust(HeapType &H,int s,int m){ RedType rc=H.r[s];int j; for(j=2*s;j<=m;j*=2) { if(j<m&&H.r[j].key<H.r[j+1].key)++j; if(!(rc.key<H.r[j].key))break; H.r[s]=H.r[j];s=j; } H.r[s]=rc;}void HeapSort(HeapType &H){ int i; RedType temp; for(i=H.length/2;i>0;--i) HeapAdjust(H,i,H.length); for(i=H.length;i>1;--i) { temp=H.r[1]; H.r[1]=H.r[i]; H.r[i]=temp; HeapAdjust(H,1,i-1); }

⑧归并排序

void Merge(RedType SR[],RedType &TR[],int i,int m,int n){ int j,k; for(j=m+1,k=i;i<=m&&j<=n;++k) { if(SR[i].key<=SR[j].key) TR[k]=SR[i++]; else TR[k]=SR[j++]; } int t; if(i<=m) { for(t=i;t<=m;t++) TR[k+t-i]=SR[t]; } if(j<=n) { for(t=j;t<=m;t++) TR[k+t-j]=SR[t]; }}void MSort(RedType SR[],RedType *TR1,int s,int t){ int m; RedType TR2[MAXSIZE+1]; if(s==t)TR1[s]=SR[s]; else{ m=(s+t)/2; MSort(SR,TR2,s,m); MSort(SR,TR2,m+1,t); Merge(TR2,TR1,s,m,t); }}void MergeSort(SqList &L){ MSort(L.r,L.r,1,L.length);}

随机生成函数

void RandSqList(SqList &L){ int n,max,min; printf("输入顺序表的大小\n"); cin>>n; printf("输入最小值和最大值\n"); cin>>min>>max; L.length=n; printf("随机产生%d个数\n",n); for(int i=1;i<=L.length;++i) { L.r[i].key=rand()%(max-min+1); L.r[i].key+=min; } printf("顺序表创建成功!\n");}

输出函数

void Output(SqList L){ printf("输出:\n"); for(int i=1;i<=L.length;i++) cout<<"data"<<"["<<i<<"]"<<": "<<L.r[i].key<<endl;}结论

(1)若n较小(例如n<50),可采用直接插入排序、冒泡排序或简单选择排序。如果记录中的数据较多,移动较费时的,应采取简单选择排序法。

(2)若记录的初始状态已经按关键码基本有序,则选用直接插入排序或冒泡排序法为宜。

(3)若n较大,则应采用改进排序方法,如快速排序、堆排序或归并排序法。这些排序算法的时间复杂度均为O(nlog2n),但就平均性能而言,快速排序被认为是目前基于比较记录关键码的内部排序中最好的排序方法,但遗憾的是,快速排序在最坏情况下的时间复杂度是O(n2),堆排序与归并排序的最坏情况时间复杂度仍为O(nlog2n)。堆排序和快速排序法都是不稳定的排序。若要求稳定排序,则可选用归并排序。

(4)基数排序可在O (d×n) 时间内完成对n个记录的排序,d是指单逻辑关键码的个数,一般远少于n。但基数排序只适用于字符串和整数这类有明显结构特征的关键码。

(5)前面讨论的排序算法,除基数排序外,都是在顺序存储上实现的。当记录本身的信息量很大时,为避免大量时间用在移动数据上,可以用链表作为存储结构。插入排序和归并排序都易在链表上实现,但有的排序方法,如快速排序和堆排序在链表上却很难实现。

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

扫描二维码推送至手机访问。

版权声明:本文由信途科技转载于网络,如有侵权联系站长删除。

转载请注明出处https://www.xintukeji.cn/xintu/63531.html

相关文章

关键词排名怎样排到第一(关键词排名怎么做上首页)

网站优化买链接,SEO网站优化买外链。链接是长期优质的 没有做不上去的关键词,您无需到处购买链接 质量高:所有站点都是运营中的站点,非站群,垃圾站! 网站SEO优化买链接就来!(爱链接)http://...

海外网络推广有哪些(海外网络推广营销)

对于企业而言,在过去十年中,可以促进业务的方式发生了巨大的变化。到目前为止,最显着的变化是数字广告支出,现在超过一半的广告支出都转移到了在线媒体上。其中内容营销、视频营销和社交媒体营销都可以作为企业推...

广州推广网站(广州推广网站优化)

广州推广网站(广州推广网站优化)

广告推广平台 资讯新闻类 头条、抖音短视频、快手视频、等这种全是以新闻资讯主导的信息流广告。)博客平台:因为博客的权重较高,所以搜索引擎对博客的排名会较为靠前,现如今,博客还是软文推广渠道的重要组成部...

河南搜索关键词排名优化教程(福州搜索关键词排名优化)

来源:河南广电-映象网草长莺飞,又是一年清明时,公众祭扫、踏青出游等自驾出行将迎来高峰,为方便公众出行,提供及时出行参考,河南高速发布2022年清明节出行提示。清明节郑州不限号、河南高速免收通行费根据...

网络优化推广营销(宁波网络优化推广)

什么是SEO优化:“SEO”又叫“SEO优化”也叫“搜索引擎优化”,主要是利用类似于百度搜索引擎的规则进行相关信息的排名靠前。比如优化网站靠前、优化新闻信息靠前、优化问答靠前等。现在我们讲的SEO优化...

网络店铺推广的方法,聊城市网络店铺推广公司

网店的建设与宣传 在网店在建好前必须有好的定位,要有自己的特色产品,有竞争优势,取一个有特色的名字店装修设计宣传 在现实中,装修设计好的店,去逛的就比较多,开网店也一样的在线客服的服务 顾客买东西,要...

现在,非常期待与您的又一次邂逅

我们努力让每一次邂逅总能超越期待

  • 效果付费
    效果付费

    先出效果再付费

  • 极速交付
    极速交付

    响应速度快,有效节省客户时间

  • 1对1服务
    1对1服务

    专属客服对接咨询

  • 持续更新
    持续更新

    不断升级维护,更好服务用户