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

网站管理员要干些什么/什么是seo技术

网站管理员要干些什么,什么是seo技术,设计师网站导航青年帮,vs怎么添加做网站左神算法基础class2——例子2经典快排,荷兰国旗改进快排,随机快排C实现1.经典快排分析核心代码完整代码2.荷兰国旗改进的经典快排分析核心代码完整代码3.随机快排分析核心代码完整代码复杂度分析1.经典快排 分析 思路和荷兰国旗问题中的预备题目一样。…

左神算法基础class2——例子2经典快排,荷兰国旗改进快排,随机快排C++实现

  • 1.经典快排
    • 分析
    • 核心代码
    • 完整代码
  • 2.荷兰国旗改进的经典快排
    • 分析
    • 核心代码
    • 完整代码
  • 3.随机快排
    • 分析
    • 核心代码
    • 完整代码
    • 复杂度分析

1.经典快排

分析

思路和荷兰国旗问题中的预备题目一样。
1.首先在数组[l,r]中把最后一个元素作为num进行比较,得到两段区域,分别为小于等于最后一个数的区域和大于最后一个数的区域。
2.在上述第一段区域内,最后一个数的值为num保留不动,倒数第二个数重新命名为num,接着继续比较,不断迭代。
3.在上述1的第二段区域内,把最后一个数命名为num,接着继续比较,不断迭代。
4.迭代继续的条件是if(l<r)

核心代码

1.排序部分
返回值为x-1:返回小于等于范围内倒数第二个位置的位置,最后一个位置就是原来的num,下次直接用倒数第二个位置作为下一次的num。

int partition(int arr[],int l,int r)
{int num = arr[r];	//把最后一个数设为num进行比较int x = l-1;		    //x为小于等于的区域,设为区域之前一个位置int cur = l;		    //cur是当前遍历的指针while(cur < r+1)	//遍历所有位置{if(arr[cur]<=num){swap(arr[cur++],arr[++x]);}elsecur++;}return x-1;			}```
2.迭代部分
迭代的条件是在[l,r]范围内,如果越界表示不可继续分
```cpp
void quicksort(int arr[],int l,int r)
{if(l<r){int a = partition(arr,l,r);quicksort(arr,l,a);quicksort(arr,a+1,r);}
}

完整代码

#include<iostream>
#include<time.h>
#define length 10
using namespace std;//交换函数
void swap(int &a,int &b)
{int temp = a;a = b;b = temp;
}int partition(int arr[],int l,int r)
{int num = arr[r];	//把最后一个数设为num进行比较int x = l-1;		//x为小于等于的区域,设为区域之前一个位置int cur = l;		//cur是当前遍历的指针while(cur < r+1)	//遍历所有位置{if(arr[cur]<=num){swap(arr[cur++],arr[++x]);}elsecur++;}return x-1;			
}void quicksort(int arr[],int l,int r)
{if(l<r){int a = partition(arr,l,r);quicksort(arr,l,a);quicksort(arr,a+1,r);}
}int main()
{//准备随机数组int arr[length] ;srand((unsigned)time(NULL));cout<<"arr = ";for(int i = 0;i < length;i++){arr[i] = rand()%10;cout<<arr[i]<<" ";}cout<<endl;//意外情况直接返回(本题用不到)if (arr == NULL || length < 2) {return 0 ;}//核心quicksort(arr,0,length - 1);//结果输出cout<<"arr = ";for(int i = 0;i<length;i++){cout<<arr[i]<<" ";}cout<<endl;system("pause");return 0 ;
}

2.荷兰国旗改进的经典快排

分析

经典快排的缺点:每次只找出一个num进行排序,如果存在多个相同值的num还需要继续划分,多做了无用功。考虑如果使用荷兰国旗的排序方法,将相同的num一次找出来,那么时间复杂度的常数时间就可以缩短。

核心代码

荷兰国旗问题需要有两个指针记录小于num的范围和大于num的范围,考虑定义一个长度为2的数组记录下来,返回数组的指针用作下一步。

void quicksort(int arr[],int l,int r)
{int a[2] = {0};if(l<r){int *p = paitition(arr,l,r,a);quicksort(arr,l,*p);quicksort(arr,*(p+1),r);}
}
int* paitition(int arr[],int l,int r,int a[])
{int x = l-1;int y = r+1;int cur = l;int num = arr[r];while(cur<y){if(arr[cur]<num){swap(arr[cur++],arr[++x]);}else if(arr[cur]>num){swap(arr[cur],arr[--y]);}else{cur++;}}a[0] = x;a[1] = y;return a;
}

完整代码

#include<iostream>
#include<time.h>
#define length 20
using namespace std;void swap(int &a,int &b)
{int temp = a;a = b;b = temp;
}int* paitition(int arr[],int l,int r,int a[])
{int x = l-1;int y = r+1;int cur = l;int num = arr[r];while(cur<y){if(arr[cur]<num){swap(arr[cur++],arr[++x]);}else if(arr[cur]>num){swap(arr[cur],arr[--y]);}else{cur++;}}a[0] = x;a[1] = y;return a;
}void quicksort(int arr[],int l,int r)
{int a[2] = {0};if(l<r){int *p = paitition(arr,l,r,a);quicksort(arr,l,*p);quicksort(arr,*(p+1),r);}
}int main()
{//生成随机数组int arr[length];srand((unsigned)time(NULL));cout<<"arr = ";for(int i = 0;i<length;i++){arr[i] = rand()%10;cout<<arr[i]<<" ";}cout<<endl;quicksort(arr,0,length - 1);//打印结果cout<<"arr1 = ";for(int i = 0;i<length;i++){cout<<arr[i]<<" ";}cout<<endl;system("pause");return 0;
}

3.随机快排

分析

荷兰国旗改进的经典快排缺点在于使用最后一个数作为num,例如[1,2,3,4,5,6]中复杂度就很高,因为此时复杂度就与数据状况有关了。
考虑:在数组中随机选一个数作为num,这样就可以绕开原始数据状况,复杂度变成长期的期望值。

核心代码

就一句num值使用随机初始化

int num = arr[l+rand()%(r-l+1)];

完整代码

#include<iostream>
#include<time.h>
#define length 20using namespace std;
void swap(int &a,int &b)
{int temp = a;a = b;b = temp;
}int* paitition(int arr[],int l,int r,int a[])
{int x = l-1;int y = r+1;int cur = l;int num = arr[l+rand()%(r-l+1)];while(cur<y){if(arr[cur]<num){swap(arr[cur++],arr[++x]);}else if(arr[cur]>num){swap(arr[cur],arr[--y]);}else{cur++;}}a[0] = x;a[1] = y;return a;
}void quicksort(int arr[],int l,int r)
{int a[2] = {0};if(l<r){int *p = paitition(arr,l,r,a);quicksort(arr,l,*p);quicksort(arr,*(p+1),r);}
}int main()
{//生成随机数组int arr[length];srand((unsigned)time(NULL));cout<<"arr = ";for(int i = 0;i<length;i++){arr[i] = rand()%100;cout<<arr[i]<<" ";}cout<<endl;quicksort(arr,0,length - 1);//打印结果cout<<"arr1 = ";for(int i = 0;i<length;i++){cout<<arr[i]<<" ";}cout<<endl;system("pause");return 0;
}

结果

复杂度分析

时间复杂度为度O(NlogN),额外空间复杂度O(logN)
1.对于长期选择来说,随机成中间的值可能性最大,分治思想T(n) = 2T(N/2) + O(n),时间复杂度为度O(N
logN)。
2.随机查找时,二分多少次多少个断点,最好情况O(logN),最差为O(N),概率上长期为O(logN)。

http://www.lbrq.cn/news/1370431.html

相关文章:

  • 网站建设的价钱/网站seo排名优化方法
  • 秦皇岛网站制作多少钱/济南网站制作平台
  • 品牌网站建设解决/人工智能培训机构排名
  • php婚庆网站/seo优化的主要任务
  • 做网站需要会的软件/百度云官方网站
  • 石家庄做外贸网站建设/哈尔滨网站优化
  • 福建网站建设费用/seo长尾关键词优化
  • 嘉兴做毛织的有哪些网站/百度公司在哪
  • 建设行业网站/小程序推广运营的公司
  • 徐州学习网站建设/班级优化大师官网登录
  • 搭建网站源码/最近的大新闻
  • 有很多长尾怎么做网站内容/苏州seo安严博客
  • 建设外贸网站多少钱/百度推广代理商赚钱吗
  • 昆明做网站建设的公司排名/成人教育机构排行前十名
  • 南平企业网站建设/爱站网关键词长尾挖掘
  • 滁州网站建设/关键词挖掘网站
  • 网页设计与网站建设过程/百度竞价什么意思
  • 东莞做微网站建设价格/网站友链查询源码
  • 做网站百度还是阿里巴巴好/站长之家ppt模板
  • wordpress单栏主题 极简/重庆seo哪个强
  • wordpress复制一个英文版/seo优化工作内容做什么
  • 外贸型网站方案/seo优化专员编辑
  • 微信网站怎样做/网站服务器是什么意思
  • 宿州大型网站建设公司/新闻热点大事件
  • 成都广告公司排行前十名/优化设计答案大全
  • 南宁网站建设_seo优化服务公司/百度有几个总部
  • 北京网站建设学习/2022最新小学生新闻
  • 近期军事新闻/站长工具seo综合查询烟雨楼
  • 创建app与网站的区别/免费网站流量
  • 网站建设用模板/百度一下网页首页
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • Fay数字人如何使用GPT-SOVITS进行TTS转换以及遇到的一些问题
  • MC0364魔法链路
  • 图像加密学习日志————论文学习DAY4
  • 吃透 B + 树:MySQL 索引的底层逻辑与避坑指南
  • 20257月29日-8月2日训练日志