首页 > 编程语言 >贪心算法和快排解决活动安排

贪心算法和快排解决活动安排

时间:2023-11-06 13:01:05浏览次数:36  
标签:right int high 快排 算法 num low 贪心 left

#include <stdio.h> #include <stdlib.h>


//快速排序法 void quick_sort(int* a, int* b, int low, int high) { if (low >= high) { return; }//递归要有一个条件使它停下来。

//使数组按右边的大小从上到下依次增大

int left = low;
int right = high;
int temp = rand() % (high - low) + low;//没有此步会运行超时,此步可理解为
//rand随机生成一个数后面膜上(high - low) 是使随机值不会超过high和low直接
//的个数后面再加上low是使temp指向low后面的数,因为后面的low会变,会分为
//两个半区 加上low可是它指向基准值(快速排顺的特点先随便从数组中选一个数,排序完左边的数小于基准值,右边的数大于基准值)后面的数
int pivotb = *(b + temp);
int pivota = *(a + temp);
// *(b + temp) = pivotb;
// *(a + temp) = pivota;
a[temp] = a[low];
b[temp] = b[low];
while (right > left)
{
    while (right > left && *(b + right) >= pivotb)
    {
        right--;应为函数为void型所以直接加;,
    }
    if (right > left)
    {
        *(b + left) = *(b + right);
        *(a + left) = *(a + right);
    }
    while (right > left && *(b + left) <= pivotb)
    {
        left++;
    }
    if (right > left)
    {
        *(b + right) = *(b + left);
        *(a + right) = *(a + left);
    }
    if (left >= right)
    {
        *(b + left) = pivotb;
        *(a + left) = pivota;
    }
   

}

// if (left - 1 > low)
// {
//     quick_sort(a, b, low, left - 1);//递归思想
// }

// //对基准值右边的所有数据再次进行快速查找(递归)
// if (left + 1 < high)
// {
//     quick_sort(a, b, left + 1, high);
// }
quick_sort(a, b, right + 1, high);递归思想
quick_sort(a, b, low, right - 1);

}

int main() { int num; scanf("%d", &num); int raws[num]; int rawf[num]; for (int i = 0; i < num; i++) { scanf("%d %d", &raws[i], &rawf[i]); } //调用-快排 quick_sort(raws, rawf, 0, num - 1);//数组,0 ,num-1 /*for (int i = 0; i < 8; i++) { printf("\n%d %d\n", raws[i], rawf[i]); printf("");

}*/

//选择数据
int curend = rawf[0];//贪心
int count = 1;如果后一个数的左边大于前一个数的右边就count++因为符合条件
for (int k = 1; k < num; k++) {
    if (raws[k] >= curend) {
        curend = rawf[k];
        count++;
    }
}
printf("%d", count);
return 0;

}

标签:right,int,high,快排,算法,num,low,贪心,left
From: https://blog.51cto.com/u_16220477/8204504

相关文章

  • 羚通视频智能分析平台行人入侵算法检测 重点区域人员徘徊算法检测
    羚通视频智能分析平台是一款利用视频监控进行算法分析、算法识别。该平台具备识别监控区域内行人入侵的功能,并能实时分析报警,为工厂、园区等环境提供了极其实用的安全保障。为了满足安防监控领域中的行人入侵识别需求,羚通视频智能分析平台专门研发了一种智能算法方案。这种......
  • C++使用冒泡排序算法对数组进行排序
     #include<iostream>//包含iostream库usingnamespacestd;//使用标准命名空间intmain(){//主函数intarr[]={5,3,2,8,6,7,1,4};//定义并初始化数组intn=sizeof(arr)/sizeof(arr[0]);//计算数组长度//使用冒泡排序算法对数组进......
  • 羚通视频智能分析平台安防视频监控算法分析 烟火检测预警
    羚通视频智能分析平台是一种基于人工智能技术的视频分析平台,旨在通过对视频内容进行智能分析和处理,提供各种视频智能应用和服务。其中,烟火算法检测是该平台中的一个功能,用于检测视频中的烟火活动。这种算法具有高精度检测、实时性强、可扩展性强、自定义配置和智能分析和预警......
  • 羚通视频智能分析平台安防视频监控算法分析 烟火检测预警
    羚通视频智能分析平台是一种基于人工智能技术的视频分析平台,旨在通过对视频内容进行智能分析和处理,提供各种视频智能应用和服务。其中,烟火算法检测是该平台中的一个功能,用于检测视频中的烟火活动。这种算法具有高精度检测、实时性强、可扩展性强、自定义配置和智能分析和预警等优......
  • 11.6 算法
    题目奇偶链表给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是奇数,第二个节点的索引为 偶数,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 O(1) ......
  • 区间分组贪心
    是我见识少了,真没见过这种的……传送门如果看成有序排列的\((x,y)\)配对,那么可以写成\(r_x-l_y\)。(因为如果是负数,会在\(y,x\)的时候被枚举到,这样就不用考虑max和绝对值了)。于是,就是分成恰好长度为\(\frac{n}{2}\)的两组,一组贡献为\(r_i\),一组贡献为\(l_i\),求贡献最大值。假设......
  • 排列算法
    马上交作业了,刚写到这样#include<stdio.h>#include<stdlib.h>intsort(intn[8]){inti,m;m=100;for(i=0;i<8;i++){if(m>n[i]){m=n[i];}}returnm;}intmain(){intresult;......
  • 排序算法
    目录1.选择排序2.冒泡排序3.插入排序4.快速排序给定数组:[12,23,8,15,33,24,77,55]1.选择排序选择排序的思路是从未排序的部分中选择最小的元素,然后将其与未排序部分的第一个元素交换。选择最小值为8,与第一个元素12交换,得到:[8,23,12,15,33,24,77,55]2.冒......
  • 随机数算法
    $rand()$范围:0-32767不是真正的随机,只是因为周期很长,看起来像如果不进行初始化,每次输出的结果是相同的#include<bits/stdc++.h>usingnamespacestd;signedmain(){ freopen("1.out","w",stdout); for(inti=1;i<=10;i++){ cout<<rand()&l......
  • 欧几里得算法
    目录1.欧几里得算法说明2.欧几里得算法伪代码3.测试伪代码1.欧几里得算法说明欧几里德(Euclidean)算法的基本原理就是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。因此我们可以不断地将这两个数相减,用新两个数(前面的较小值与差值)替代初值求最大公约数。因此......