排序(左神初级)p3

排序稳定性:

稳定的排序算法有:冒泡、插入、归并、桶排序 

不稳定的算法:快排、选择、堆排

 

1.计数排序(只能排序正整数)

1.计数排序不基于比较,准备max值+1个桶;
2.遍历数组,数值为a时,把桶位置为a的数加一;
3.重构数组。

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
       
       int maxn=INT_MIN;
       for(int i=0;i<nums.size();i++){
           maxn=max(maxn,nums[i]);
       }
       vector<int> bucket(maxn+1,0);

       for(int i=0;i<nums.size();i++){
           bucket[nums[i]]++;
       }
       int j=0;
       for(int i=0;i<bucket.size();i++){
           while(bucket[i]--){
              nums[j++] = i;
           }
       }
       return nums;
    }
};

2.应用

给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。

1.假设有N个数,则准备N+1个桶;

2.遍历,得到最大max、最小值min,若相等,则返回0;

3.最大值max和最小值min分别放在[N]和[0]桶位置;

4.将max~min N+1等分,中间某个元素属于哪个范围就放置进去,中间必然存在一个空桶;

5.准备三个长度为N+1的数组,分别为nmax[],nmin[] ,nempty[]。表示当前位置桶内的最大值、最小值和桶是否为空。把数组填入N+1个桶中,更新最大值、最小值;

6.从1号桶开始,如果桶为空则继续下一个,若桶非空找前一个非空桶的最大值和当前桶的最小值求差值。

#include<iostream>
#include <algorithm>
#include <windows.h>

#define length 10
using namespace std;

int main(){
   int nums[length]={-4,18,1,23,3,52,7,9,66,11} ;
   int minm=INT_MAX;
   int maxm=INT_MIN;
   //找到最大最小值
   for(int i=0;i<length;i++){
      minm=minm<nums[i]?minm:nums[i];
      maxm=maxm>nums[i]?maxm:nums[i];
  }
  //三个数组,是否为空、最大、最小值
  //一定,一定,一定要初始化为0!!!
  bool mempty[length+1]={0};
  int mmax[length+1]={0};
  int mmin[length+1]={0};
 
  for(int i=0;i<length+1;i++){
    //该数在哪一个桶里(这个公式有待商榷)
     int a = (nums[i]-minm)*(length+1) / (maxm-minm);
    //桶为空,则最大最小值=该数
    if(mempty[a]==0){
        mmax[a]=nums[i];
        mmin[a]=nums[i];
        mempty[a]=1;
   //不为空则更新
    }else{
        mmax[a]=mmax[a]>nums[i]?mmax[a]:nums[i];
        mmin[a]=mmin[a]<nums[i]?mmin[a]:nums[i];
    }
  }
  
  //桶不为空,则计算和前一个非空桶的差值,不断更新
  int large=mmax[0],res=0;
  for(int i=0;i<length+1;i++){
        if(mempty[i]!=0){
      res=max(res,mmin[i]-large);
      large=mmax[i];

        }
  }
  cout<<res<<endl;
  system("pause");
}

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值