quick sort(c++)以及k选取

2023-05-16

#include<iostream>
#include<vector>
using rank = int;
using namespace std;

int dash = 0;
int swap(vector<int>&arr,int lo, int hi)
{
	dash = arr[lo];
	arr[lo] = arr[hi];
	arr[hi] = dash;
}
//version A 勤于拓展,懒于交换。
//每次选取lo为pivot备份,进行排序,
//将pivot放在对应于已经排序完的有序序列中的位置
int partation_LUG(vector<int>& arr, int lo, int hi)
{
	int pivot = arr[lo];
	while (lo < hi)
	{
		while (lo < hi && pivot <= arr[hi]) --hi;
		arr[lo++] = arr[hi];

		while (lo < hi && arr[hi] <= pivot) ++lo;
		arr[hi--] = arr[lo];
		
		
		
	}
	arr[lo] = pivot;
    return lo;
}
//version B 勤于拓展,懒于交换。
//多次交换会使算法的不稳定性提高
int patration_advance(vector<int>& arr, int lo, int hi)
{

	int pivot = arr[lo];
	while (lo < hi)
	{
		while (lo < hi)
		{
			if (pivot < arr[hi]) hi--;
			else {
				arr[lo++] = arr[hi];
				break;
			}
		}
		while (lo < hi)
		{
			if (arr[lo] < pivot) lo++;
			else {
				arr[hi--] = arr[lo];
				break;
			}
		}
		arr[lo] = pivot;
		return lo;
	}
}
//LGU version
//G 向前滚动 不稳定
int patration_LGU(vector<int>& arr, int lo, int hi)
{

	int pivot = arr[lo];
	int mi = lo;
	for (int k = lo + 1; k <= hi; k++)
	{
		if (arr[k] < pivot)
		{
			swap(arr, ++mi, k);
		}
		
	}
	swap(arr, lo, mi);
	return mi;
}
//众数检验  
bool majEleCheck(vector<int>& arr, int maj)
{
	int occurrence = 0;
	for (int i = 0; i < arr.size(); i++)
	{
		if (arr[i] == maj)
		{
			occurrence++;
		}
	}
	return 2 * occurrence > arr.size();
}

void quickSort(vector<int>& arr, int lo, int hi)
{
	if (hi - lo <= 1) return;
	int pivot = partation(arr, lo, hi - 1);//partation为上述三种算法中的一种
	quickSort(arr, lo, pivot);
	quickSort(arr, pivot + 1, hi);

}
//k-选择的特例,众数选取,而众数一般为中位数
int majEleCandidate(vector<int>& arr)
{
	int maj;
	for (int c = 0, i = 1; i < arr.size(); i++)
	{
		if (0 == c)
		{
			maj = arr[i];
			c = 1;
		}
		else
		{
        maj == arr[i] ? c++ : c--;
		}
	}
	return maj;
}
bool majority(vector<int>& arr, int& maj)
{
	maj = majEleCandidate(arr);
	return majEleCheck(arr, maj);
}

//基于quicksort的k选取
//rank(pivot)=k则中,
//rank(pivot)<k,则将范围缩减到  rank(pivot)+1,hi
//rank(pivot)>k,则将范围缩减到  lo < rank(pivot)-1
void k_select_base_on_quickSort(vector<int>& arr, int k)
{
	for (int lo = 0, hi = arr.size() - 1; lo < hi;)
	{
		int i = lo, j = hi;
		int pivot = arr[lo];
		while (i < j)
		{
			while (i < j && pivot <= arr[j]) j--;
			arr[i] = arr[j];
			while (i < j && arr[i] <= pivot)i++;
			arr[j] = arr[i];
		}
		
		arr[i] = pivot;
		if (k <= i) hi = i - 1;
		if (i <= k) lo = i + 1;
	}


}
int main()
{



	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

quick sort(c++)以及k选取 的相关文章

随机推荐

  • 找到并标记Mesh顶点

    1 在Unity 3D中新建一个物体 本文以Cube为例 2 创建一个C 脚本 命名为MeshTest 3 在脚本中写入程序 在打开的脚本 MeshTest 上编写代码 xff0c 首先获取 MeshFilter 组件 xff0c 然后获取
  • win11 命令 wmic:无效的指令 解决办法

    我想你肯定看到过让你修改环境变量的方法 但是 xff0c 如果你的电脑就根本没有装wmic xff0c 再怎么修改环境变量也是徒劳 我们打开设置 xff1a Win 43 I 点击应用 选择 可选功能 添加可选功能 搜索wmic xff0c
  • 【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解

    这句话声明一个结构体 xff0c 名字是GPIO InitStructure xff0c 结构体原型由GPIO InitTypeDef 确定 xff0c 在stm32中用来初始化GPIO 设置完GPIO InitStructure里面的内容
  • 如何在VScode上运行C语言

    如何在VS code上运行C语言 安装VS code 下载MinGW w64 xff1b 查验是否成功 我在VS code上尝试运行C语言后 xff0c 想和大家分享一下经验 安装VS code 下载MinGW w64 xff1b 查验是否
  • Node.js 如何实现OCR文字识别

    Node js 如何实现OCR文字识别 OCR Optical Character Recognition 是指用光学技术识别文字图像的技术 随着全新的技术出现 xff0c OCR 技术已经发展成为一种非常先进的技术 xff0c 可以从图片
  • Jetson nano烧录与简介

    Jetson nano 烧录教程 文章目录 Jetson nano 烧录教程 Jetson nano 简介1 Jetson Nano 接口介绍2 盒内包含3 不包含的物品 xff08 额外购入 xff09 4 Jetson nano的三种供
  • 51单片机-定时器(简易时钟的实现)

    文章目录 前言一 定时器的功能以及定时器的结构定时器的功能定时器的结构 二 定时器的控制工作模式寄存器TMOD控制寄存器TCON写代码来初始化定时器 三 定时器引发中断简易时钟主程序main c延时函数Delay c控制LCD162模块LC
  • 用于评估婴儿认知发展的IMU内嵌式玩具

    0 5岁是神经发育的敏感时期 xff0c 对身心健康至关重要的EF xff08 执行功能 Executive functions xff09 会在这个时期出现 在现代临床和研究实践中 xff0c 编码员通过手动标记视频中婴儿在使用玩具或社交
  • yolo+ocr集装箱字符识别(pytorch版本)

    前言 这个是我们 的大创项目 当我们拿到一份数据集 xff0c 首先就是要对整个项目有个较为清晰的认识 xff0c 整体的思路是什么 xff0c 难点在哪 xff0c 怎么部署和实现 1 整体的思路 xff1a 先通过目标检测网络 xff0
  • ROS话题通信实现发布接收以及vscode编译配置(五)C++版本

    在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 ROS是进程 xff08 也称为Nodes xff09 的分布式框架 因为这些进程甚至还可分布于不同主机 xff0c 不同主机协同工作 xff0c 从而分散计算
  • CMakeList

    目录 1 简介 2 常用命令 2 1 指定 cmake 的最小版本 2 2 设置项目名称 2 3 设置编译类型 2 4 指定编译包含的源文件 2 4 1 明确指定包含哪些源文件 2 4 2 搜索所有的 cpp 文件 2 4 3自定义搜索规则
  • 多旋翼飞行器设计与控制(二)—— 基本组成

    多旋翼飞行器设计与控制 xff08 二 xff09 基本组成 一 机架 1 机身 指标参数 xff1a 重量 xff1a 尽可能轻轴距 xff1a 外圈电机组成圆的直径材料 xff1a 冲碳纤维就完了布局 xff1a 2 起落架 作用 xf
  • 多旋翼飞行器设计与控制(六)—— 动态模型和参数测量

    多旋翼飞行器设计与控制 xff08 六 xff09 动态模型和参数测量 一 多旋翼控制模型 刚体运动学模型 跟质量与受力无关 xff0c 只研究位置 速度 姿态 角速度等参量 xff0c 常以质点为模型 刚体动力学模型 它与一般刚体动力学模
  • 多旋翼飞行器设计与控制(七)—— 传感器标定和测量模型

    多旋翼飞行器设计与控制 xff08 七 xff09 传感器标定和测量模型 一 三轴加速度计 三轴加速度计是一种惯性传感器 xff0c 能够测量物体的比力 xff0c 即去掉重力后的整体加速度或者单位质量上作用的非引力 当加速度计保持静止时
  • 【STM32】stm32通过地址操作寄存器

    stm32通过地址操作寄存器 0x01 stm32数据类型所占字节数0x02 如何查看寄存器地址 xff08 基地址 43 偏移地址 xff09 0x03 操作寄存器地址控制LED闪烁 xff08 代码 xff09 0x04 通过定义结构体
  • ARM裸机开发——启用SDRAM的按键中断控制灯实验

    写在前面 本文承接前文嵌入式系统学习 嵌入式系统 Linux环境搭建和LED灯闪烁实验 以S3C2440A作为开发平台 xff0c 以Linux中ARM Linux gcc交叉编译器作为编译环境进行学习 xff0c 由于本课程为单片机基础的
  • 二维vector

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 13.request-session,验证码

    使用session使得请求变成一个对象 注意登录页面隐藏的参数 爬取古诗文登录页面 span class token keyword import span requests span class token keyword from sp
  • STM32-串口通信(串口的接收和发送)

    文章目录 STM32的串口通信一 STM32里的串口通信二 串口的发送和接收串口发送串口接收 三 串口在STM32中的配置四 串口接收的两种实现方式1 需要更改的地方2 查询RXNE标志位3 使用中断 总结 STM32的串口通信 本文在于记
  • quick sort(c++)以及k选取

    include lt iostream gt include lt vector gt using rank 61 int using namespace std int dash 61 0 int swap vector lt int g