• 2024-06-10二分#背包#快排#LCS详解
    二分#背包#快排#LCS详解文章目录二分#背包#快排#LCS详解1.二分搜索2.01背包问题3.快速排序4.最长公共子序列1.二分搜索在处理大规模数据集时,查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法,其时间复杂度为O(logn)。二分搜索通
  • 2024-06-10优雅的快排之分治与递归思想,透彻理解快排
    摘要:给你一个数组,要求你对其按照从小到大的顺序进行排序.你是怎么做的呢?英国计算机科学家东尼.霍尔在英国国家物理实验室工作的时候提出一种名为快速排序的排序算法,它可以高效地将一个数组进行快速排序.那么霍尔是怎么想到的?接下来根据从y总那里学到的以及个人的理解来介
  • 2024-06-02每天写两道(四)最大子数组和、手撕快排
    53.最大子数组和.-力扣(LeetCode)给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1]的和最大,为 6。
  • 2024-05-08快速排序
    快速排序快排模板(以j为分界)快排属于分治算法,分治算法都有三步:1.分成子问题2.递归处理子问题3.子问题合并voidquick_sort(intq[],intl,intr){//递归的终止情况if(l>=r)return;//第一步:分成子问题 inti=l-1,j=r+1,x=q[1+r>>
  • 2024-04-12常用快排算法实现
    快速排序voidquick_sort(intq[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=q[l+r>>1];while(i<j){doi++;while(q[i]<x);doj--;while(q[j]>x);if(i<j)
  • 2024-04-11排序法:选择、冒泡、插入和快排
    排序方法指的是对一个无序的数列,按照一定方法让其变得有序。排序法重点是思维过程,本文中的四种排序方法都较为基础,但其中蕴含的算法思维各不相同,适合作为算法入门学习内容。选择排序法我认为选择排序法是较符合一般人思维模式的排序法,它是指对于每个数列,从其中找出最小的一个数
  • 2024-04-021.2归并
    解释都写在代码注释里了,请配合代码一起食用。 其实就是把原来的数列从中间砍成两部分,然后再四份、八份、十六份...直到不能分为止。然后重排两个最小单元的顺序,排好序后再把小单元合并成中等单元,重排两个中等单元的顺序,排好序好再合并成大单元,重排两个大单元的顺序...以此类
  • 2024-04-021.1快排
    voidquick_sort(intq[],intl,intr)//l是数组最左边的下标,r是数组最右边的下标。{if(l>=r)return;//数组中只有一个数或没有数。inti=l-1,j=r+1,x=q[l+r>>1];//i,j的起始在数组两头while(i<j){doi++;while
  • 2024-03-14经典排序算法回顾:
    排序算法有非常多,应用也非常多,在各种笔试面试中也常常出现,所以现在就来复习一下相关的排序算法吧!下面会介绍多种排序算法,在此之前先说一下,排序算法的评价主要有以下几个方面:排序算法的时间复杂度;排序算法的空间复杂度;排序算法的稳定性其中前两个是老生常谈了,基本提到算法都会考虑
  • 2024-02-22快排-归并-堆排序
    概述排序算法算是最经典的算法了,只要你学习算法,就永远也离不开他,常用的排序算法有:冒泡排序插入排序希尔排序桶排序计数排序计数排序快速排序归并排序堆排序这些排序大致特点如下:其中最重要,也最复杂的三种排序,分别是:快速排序归并排序堆排序一.快速排序1.大
  • 2024-01-25Luogu P1923 求第 k 小的数
    link求第k小的数题目描述输入\(n\)(\(1\len<5000000\)且\(n\)为奇数)个数字\(a_i\)(\(1\lea_i<{10}^9\)),输出这些数字的第\(k\)小的数。最小的数是第\(0\)小。请尽量不要使用nth_element来写本题,因为本题的重点在于练习分治算法。输入格式无输出格式无
  • 2024-01-24快速排序
    快排 做法 快排,基于分治1.确定分界点,q[l],q[(l+r)/2],q[r],随机,四种都可以,但是推荐q[(l+r)/2]2.[重点]调整区间,划分2个区间,使得左半边所有的数<=x,右半边所有的数>=x,注意,x不一定在两个区间交界处,可能在很奇怪的位置3.递归处理左右两段 比较暴力的做法   先开
  • 2023-12-19快排拓展
    快速排序三个区域排序思路来源一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到笔记内容1.0问题描述在一个数组中,使用快排分出大于、等于、小于某一数值的区域算法思路使用两个变量bigger、smaller记录已经排好的大于、小于区域边界。x[i]<
  • 2023-12-09想想为什么这两段代码,一段可以实现快排,一段实现不了?
    可实现代码#include<stdio.h>voidquicksort(inta[],inti,intj);intmain(){intnum;inta[10001]={0};scanf("%d\n",&num);inti=0;while(i<num){scanf("%d",&a[i]);i++;
  • 2023-11-21快排模版
    我打算复习下快排模版,结果怎么写都写不对,贼离谱,后来发现是自己犯了一个很弱智的错误,想取bas作为随机下边然后把a[bas]作为基准,但问题在于,我把c数组赋值给a数组这步省略成了把基准赋值给a[bas]了。。这固然是节约空间的好思路,但问题在于我此前错把一个可能被修改的量当成常量来用了
  • 2023-11-20今天复习了一遍快速排序
    #include<iostream>usingnamespacestd;#include<stdio.h>constintN=10e6+10;intn;intq[N];voidquick_sort(intq[],intl,intr){if(l>=r)return;intx=q[l];inti=l-1;intj=r+1;while(i<
  • 2023-11-07快排优化
    实验一:快速排序算法及其优化编程实现快速排序//编程实现的快排voidqSort(intn[],intl,intr){if(l>=r){return;}inti,j;i=l-1;j=r+1;intx=n[(i+j)/2];while(i<j){doi++;while(n[i]<x);do
  • 2023-11-06贪心算法和快排解决活动安排
    #include<stdio.h>#include<stdlib.h>//快速排序法voidquick_sort(int*a,int*b,intlow,inthigh){if(low>=high){return;}//递归要有一个条件使它停下来。//使数组按右边的大小从上到下依次增大intleft=low;intright=high;inttemp=rand()%(high-
  • 2023-11-02快排
    //快速排序#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e6+5;intn;inta[N];voids(intl,intr){//快速排序函数 if(l>=r) return;//递归结束条件 inti=l;//将左指针给i intj=r;//将右指针给j intq=a[r];//q代表基数
  • 2023-10-0302 快速排序(快排)
    #include"stdio.h"voidQuickSort(int*array,intlow,intheight){inti,j,tmp;//两个哨兵,和开头的元素下标inttemp;i=low;j=height;tmp=array[low];if(i>j)//如果下标i大于下标j,函数结束运行{return;}
  • 2023-09-28快排模板
    voidquick_sort(inta[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=a[l+r>>1];while(i<j){doi++;while(a[i]<x);doj--;while(a[j]>x);if(i<j)swap(a[i],a[j]);}quick_sort(
  • 2023-09-17简单分治快排问题解析(c++实现)
    这几天刷了需要使用分治快排思想去解决的几道比较好的题目,所以写下这篇博客用于复习和以后的复盘。什么是分治快排思想首先我们要知道什么是分治快排思想,这个思想其实就是在模拟实现qsort算法的时候使用的一个方法,在模拟实现qsort的时候,我们知道第一步是需要使用一个随意选择(三数取
  • 2023-09-15双边快排的基准点和先判断left还是right问题
     前同事问了我一个双边快排的算法,他问我怎么都无法正常排序,代码如下,publicstaticvoidmain(String[]args){int[]arr=newint[]{7,3,6,4,8,9,0,22,28,2,3,79,24};arr=newint[]{4,4,6,5,3,2,8,1};System.out.println("left:"+0+"right:"
  • 2023-09-06快速排序
    快排模板#include<iostream>usingnamespacestd;constintN=1e6+10;intq[N];voidquick_sort(intq[],intl,intr){ if(l>=r)return; intx=q[(l+r)/2],i=l-1,j=r+1; while(i<j){ doi++;while(q[i]<x); doj--;while(q[j]>x); if(i&
  • 2023-08-29快排及链表排序
    文章目录一、普通的快排二、链表的创建三、链表的冒泡排序四、链表快排五、链表归并排序一、普通的快排voidQuickSort(vector<int>&vec,intlow,inthigh){ intpivot=vec[low];//选择第一个元素作为枢纽元 //mid总是指向最后一个比枢纽元小的位置,当需要交换元素时,先