C++ 算法教程

news2024/11/23 3:38:17
 归并排序
#include<iostream>
using namespace std;
template <class T>
void Merge(T data[],int start,int mid,int end)
{
	int len1 = mid - start + 1, len2 = end - mid;
	int i, j, k;
	T* left = new int[len1];
	T* right = new int[len2];
	for (i = 0; i < len1; i++)
		left[i] = data[i + start];
	for (i = 0; i < len2; i++)
		right[i] = data[i + mid + 1];
	i = 0, j = 0;
	for (k = start; k < end; k++)
	{
		if (i == len1 || j == len2)
			break;
		if (left[i] <= right[j])
			data[k] = left[i++];
		else
			data[k] = right[j++];
	}
	while (i < len1)
		data[k++] = left[i++];
	while (j < len2)
		data[k++] = right[j++];
	delete[] left;
	delete[] right;
}
template <class T>
void MergeSort(T data[], int start, int end)
{
	if (start < end)
	{
		int mid = (start + end) / 2;
		MergeSort(data, start,mid);
		MergeSort(data, mid + 1, end);
		Merge(data, start, mid, end);
	}
}
void show(int*temp,int n)
{
	for (int i = 0; i < n; i++)
		cout << temp[i] << "  ";
}
void main()
{
	int temp[8];
	for (int i = 0; i < 8; i++)
		cin >> temp[i];
	MergeSort<int>(temp, 0,7);
	show(temp, 8);
}

冒泡排序_相邻交换

#include <stdio.h>  
  
int main()  
{  
    int i,p,temp;  
    int array[10] = {2,6,1,9,4,7,5,8,3,0};  
    printf("Display this array:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }  
    for(i = 1;i < 10; ++i)
{
   for(p = 0; p < 10; ++p)
  {
       if(array[i]>array[p])
      {
	array[i] = 	array[i]^array[p];
	array[p] = array[i]^array[p];	
	array[i] = array[i]^array[p];
      }
  }
}
    printf("\n");  
    printf("After sorting,this array is:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }     
    printf("\n");  
    return 0;  
}  
判断循环链表

1.建立set集合,每次遍历存储元素,当集合大小不变,但循环仍在继续时说明存在循环,并得出该位置
2.定义双指针遍历:一个指针每次移动一个节点,一个指针每次移动2个节点,当2个节点指针在一个节点指针后面时,此链表存在循环。
3.链表反向
4.构造双向链表

swap

a:1001
b:1100
a=a^b;  a:0101
b=a^b;  b:1001
a=a^b;  a:1100

a = a + b;
b = a - b;
a = a - b;

直插排序
#include <stdio.h>  
  
int main()  
{  
    int i,p,temp;  
    int array[10] = {2,6,1,9,4,7,5,8,3,0};  
    printf("Display this array:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }  
      	//选择第一个数做为起始排序
	for(i = 1; i < 10; ++i)
	{
		temp = array[i];	//待插入排序数
		for(p = i-1; p >=0 && array[p]>temp; --p)
		{//遍历已排序数列表
			{//如果当前数大小在已排序范围中,开始向右位移一个数让出空间
				array[p+1] = array[p];	
			}
		}
		//找到待排序数的位置,在让出的空间直接插入		
		array[p+1]=temp;			
	}
    printf("\n");  
    printf("After sorting,this array is:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }     
    printf("\n");  
    return 0;  
}  

#include <stdio.h>  
  
int main()  
{  
    int i,j,t;  
    int array[10]={2,7,1,8,5,9,3,4,0,6};  
    printf("\nDisplay this array:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }  
    printf("\n");  
    for(i=1;i<=9;i++)  
    {  //遍历
        int t = i-1;  //假设当前数为最小数
        for(j=i;j<10;j++)  
        {  
            if(array[j]<array[t])  
            {  //遍历找到最小的数,保存最小数索引
                t=j;  
            }  
        }  
        if(t!=(i-1))  
        {  //交换最小数与假设最小数
            int temp = 0;  
            temp=array[i-1];  
            array[i-1]=array[t];  
            array[t]=temp;  
        }  
    }  
    printf("After sorting,this array is:\n");  
    for(i=0;i<10;i++)  
    {  
        printf("%d ",array[i]);  
    }  
    printf("\n");  
    return 0;  
}  

https://github.com/sashafierce/100-days-of-Algorithm-Challenge

GitHub - hackerkid/Awesome-Data-Structures: C++ implementation of basic data structures and algorithms

GitHub - hackerkid/LightOJ-Solutions: :sparkles: LightOJ Solutions with hints

GitHub - mmc-maodun/Data-Structure-And-Algorithm: Data Structure And Algorithm(常用数据结构与算法C/C++实现)

https://leetcode.com/

Codewars - Achieve mastery through coding practice and developer mentorship

Khan Academy | Free Online Courses, Lessons & Practice

https://github.com/sashafierce/Algo_Ds_Notes

位操作基础篇之位操作全面总结_c++位操作-CSDN博客

https://www.cnblogs.com/findumars/p/5180528.html


创作不易,小小的支持一下吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爆火的治愈系插画工具又来了,额度居然有18w,根本花不完?

AI治愈插画又又又来了 今天给大家推荐一款完全免费的软件&#xff0c;用过的人都说好&#xff01; 先来看看我生成的图 制作过程非常简单&#xff0c;输入你想要生成的画面咒语。 工具地址&#xff1a;https://www.qiyuai.net/ 模型目前有两种 我上面的图就是用的第一种通用…

Shell 学习笔记 - 导读 + 变量定义

初识 Shell 本章学习目标 了解什么是 Shell了解 Shell 的版本及用途掌握 Shell 变量的用法 导读&#xff08; 了解 \color{cyan}{了解} 了解&#xff09; 现在的人们使用的操作系统&#xff08;Windows、Android、iOS 等&#xff09;都带有图形化界面&#xff0c;简单直观&…

秋招突击——第五弹——Java的SSN框架快速入门——SpringBoot的使用

文章目录 引言SpringBoot简介入门案例SpringBoot项目快速启动 SpringBoot概述起步依赖辅助功能 基础配置配置文件格式基础配置Yaml格式书写Yaml格式读取多环境开发多环境启动命令格式多环境开发兼容问题配置文件分类 整合第三方技术整合Junit基于SpringBoot实现SSM整合Springbo…

axure9设置组件自适应浏览器大小

问题&#xff1a;预览时不展示下方的滚动条 方法一&#xff1a;转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板&#xff0c;点击预览 7.此时可以发现底部没有滚动条了 方法…

23 华三(自动获取的IP地址)

华三交换机 DHCP 配置 #version 7.1.070, Alpha 7170 //设备的版本信息 #sysname sw1 //修改设备的名字 #irf mac-address persistent timerirf auto-update enableundo irf link-delayirf member 1 priority 1#dhcp enable //开启DHCP 服务dhcp server forbidden-ip 192.168.…

PDFFactoryFinePrint软件安装包下载+详细安装教程

简介&#xff1a; pdfFactory Pro(虚拟打印机)是一个无须 Acrobat 创建 Adobe PDF 文件的打印机驱动程序。 pdffactory pro虚拟打印机提供了比其他程序提供得更简单、更有效率和更少的花费的创建 PDF 文件的解决方案。用于需要安全的 PDF(法律文档、公司信息等)和其他高级功能…

Vue53-Todo-list案例

一、需求&#xff1a; 二、组件的划分&#xff1a;按照功能划分 组件起名&#xff0c;不要和html内置元素重名&#xff01; Vue鼓励组件名用多个单词。 三、组件化编码流程 3-1、实现静态组件 将各个组件的基本框架写好&#xff0c;并在App.vue文件中进行引入和注册。 将已有…

HTTP协议 快速入门

http概述 无状态性&#xff1a;HTTP是一个无状态协议&#xff0c;这意味着服务器不会在请求之间保存任何会话信息。每个请求都是独立的&#xff0c;服务器不会记住之前的请求。 请求-响应模型&#xff1a;HTTP通信是基于客户端发送请求和服务器返回响应的模型。客户端&#xf…

ffmpeg解封装rtsp并录制视频-(1)解封装rtsp断网或摄像机重启后自动重连处理

头文件&#xff1a; xtools.h #pragma once #include <thread> #include <iostream> #include <mutex> //日志级别 DEBUG INFO ERROR FATAL enum XLogLevel {XLOG_TYPE_DEBUG,XLOG_TYPE_INFO,XLOG_TPYE_ERROR,XLOG_TYPE_FATAL }; #define LOG_MIN_LEVEL XLO…

【Android】基于webView打造富文本编辑器(H5)

目录 前言一、实现效果二、具体实现1. 导入网页资源2. 页面设计3. 功能调用4. 完整代码 总结 前言 HTML5是构建Web内容的一种语言描述方式。HTML5是Web中核心语言HTML的规范&#xff0c;用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的&#xff0c;在浏览器中通过…

C语言实现动态栈

#include<stdio.h> #include<stdlib.h> #include<stdbool.h>// 每一个节点的数据类型 typedef struct Node {int data;struct Node * pNext; }NODE, * PNODE; // NODE等价 struct Node PNODE等价于 struct Node *// 栈 typedef struct Stack {PNODE pTop;P…

如何判断一个js对象是否存在循环引用

一、背景 在前端JSON.stringfy是我们常用的一个方法&#xff0c;可以将一个对象序列化。 例如将如下对象序列化 const person { name: kalory, age:18}JSON.stringfy(person) // 结果 {"name":"kalory","age":18}将一个数组序列化const arr …

Gson的常见用法

一引入依赖 <!-- json解析的工具包 --> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> <!-- 主要为了代码简洁和日志打印 --> <…

天翼云认证专家解决方案架构师(理论)

1.某大型互联网公司为了提升应用程序和基础设施的稳定性&#xff0c;计划引入自动化监控工具。以下哪些工具可以满足公司的需求? A.Grafana B.Nagios C.Prometheus D.Jenkins 2.天翼智能边缘云ECX是位于网络边缘位置的云&#xff0c;兼具云和CDN的特性&#xff0c;将计算、存…

Windows11安装并使用Gstreamer-1.0

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载二、使用步骤1.安装2.命令行测试 总结 前言 Gstreamer这个工具的重要性就不用多说了吧&#xff0c;在一些视频播放和解码领域大放异彩。以前更多的是在…

[AIGC] python遍历以及字符串的切片

以下是一篇关于Python遍历方法和字符串切片的文章&#xff0c;以及一个在LeetCode中的问题进行解释。文章最后会给出解题思路和代码实现。 Python遍历方法与字符串切片入门教程 在Python语言中&#xff0c;我们包含了许多内置的函数和方法令其适合于各种数据处理任务。在这个…

使用 Oracle SQL Developer 导入数据

使用 Oracle SQL Developer 导入数据 1. 导入过程 1. 导入过程 选择要导入数据的表&#xff0c; 然后单击右键&#xff0c;选择"导入数据"&#xff0c; 浏览本地文件&#xff0c;选择正确的工作表&#xff0c; 按默认&#xff0c; 按默认&#xff0c; 根据情况修改&…

正能量情感语录热门素材文案去哪里找?文案素材网站分享

正能量情感语录热门素材文案去哪里找&#xff1f;文案素材网站分享 想为你的作品注入正能量和情感温度&#xff1f;不知如何获取热门情感语录素材&#xff1f;别担心&#xff0c;今天我将为大家推荐一些海外知名的素材网站&#xff0c;让你轻松找到受欢迎的文案素材&#xff…

fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案

零、实验报告地址 计算机视觉实验二:基于支持向量机和随机森林的分类(Part one: 编程实现基于支持向量机的人脸识别分类 )-CSDN博客 一、代码报错 fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden 二、报错原因 通常是由于访问权限不足导致的…