码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【25届秋招备战C++】算法篇-排序算法合集


    【25届秋招备战C++】算法篇-排序算法合集

    • 一、简介
    • 二、解题思路
    • 三、模板
    • 四、参考

    一、简介

    排序算法是计算机科学中的基本算法之一,用于将一组数据按照特定的顺序(升序或降序)进行排列。排序算法广泛应用于数据管理和检索系统,提高数据访问效率,也是其他高级算法的基础,如搜索和合并算法。

    二、解题思路

    排序算法的解题思路通常包括比较和交换元素位置。根据比较和移动元素的方式,排序算法可以分为多种类型,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。

    三、模板

    • 冒泡排序(Bubble sort)
    void bubble_sort(vector<int> &nums, int n) {
    	 bool swapped;
    	 for (int i = 1; i < n; ++i) {
    	 	 swapped = false;
    		 for (int j = 1; j < n- i + 1; ++j) {
    			 if (nums[j] < nums[j-1]) {
    			 	swap(nums[j], nums[j-1]);
    			 	swapped = true;
    			 }
    		 }
    		 if (!swapped) {
    		 	break;
    		 }
    	 }
     }
    
    • 选择排序(Selection sort)
    void selection_sort(vector<int> &nums, int n) {
    	int mid;
    	for (int i = 0; i < n- 1; ++i) {
    		mid = i;
    		for (int j = i + 1; j < n; ++j) {
    			if (nums[j] < nums[mid]) {
    	 		mid = j;
    	 		}
    	 	}
    	 	swap(nums[mid], nums[i]);
    	 }
     }
    
    • 插入排序(Insertion sort)
    void insertion_sort(vector<int> &nums, int n) {
     	for (int i = 0; i < n; ++i) {
     		for (int j = i; j > 0 && nums[j] < nums[j-1];--j) {
     			swap(nums[j], nums[j-1]);
     		}
     	}
     }
    
    • 快速排序(Quicksort)
    void quick_sort(vector<int> &nums, int l, int r) {
    	 if (l + 1 >= r) {
    	 	return;
    	 }
    	 int first = l, last = r- 1, key = nums[first];
    	 while (first < last){
    	 	while(first < last && nums[last] >= key) {--last;}
    	 	nums[first] = nums[last];
    	 	while (first < last && nums[first] <= key) {
    	 	++first;
    		 }
    	 	nums[last] = nums[first];
    	 }
    	 nums[first] = key;
    	 quick_sort(nums, l, first);
    	 quick_sort(nums, first + 1, r);
     }
    
    • 归并排序(Merge sort)
    void merge_sort(vector<int> &nums, int l, int r, vector<int> &temp) {
    	 if (l + 1 >= r) {return;}
    	 // divide
    	  int m = l + (r- l) / 2;
    	  merge_sort(nums, l, m, temp);
    	  merge_sort(nums, m, r, temp);
    	 // conquer
    	 int p = l, q = m, i = l;
    	 while (p < m || q < r) {
    	 	if (q >= r || (p < m && nums[p] <= nums[q])) {
    	 		temp[i++] = nums[p++];
    	 	} else {
    	 		temp[i++] = nums[q++];
    	 	}
    	 }
    	 for (i = l; i < r; ++i) {
    	 	nums[i] = temp[i];
    	 }
     }
    

    四、参考

    LeetCode 101 - A LeetCode Grinding Guide (C++ Version)

  • 相关阅读:
    Windows环境将SpringBoot程序注册成为服务实现开机自启和后台运行
    [补题记录] Atcoder Beginner Contest 293(E)
    一文极速理解深度学习
    MEGC(FACIAL MICRO-EXPRESSION GRAND CHALLENGE)微表情识别比赛相关网站
    试图颠覆 JavaScript 生态?亲身试用新 JS 运行时 Bun 后,我觉得未来可期
    DALL·E 2 文生图模型实践指南
    第七章 将对象映射到 XML - 指定 XML 摘要
    小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务
    CDGP与CDMP考哪个合适?
    -bash: ~/anaconda3/bin/python:Invalid argument 问题解决
  • 原文地址:https://blog.csdn.net/weixin_44791229/article/details/140384234
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号