【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)

相关推荐

  1. 25备战C++】算法-排序算法

    2024-07-12 22:22:02       18 阅读
  2. 25备战C++】算法-贪心算法(Greedy)

    2024-07-12 22:22:02       46 阅读
  3. 2024SLAMer算法岗面试题总结

    2024-07-12 22:22:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 22:22:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 22:22:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 22:22:02       58 阅读
  4. Python语言-面向对象

    2024-07-12 22:22:02       69 阅读

热门阅读

  1. 国道省道乡道见闻

    2024-07-12 22:22:02       21 阅读
  2. 解锁深度学习黑箱:注意力机制的神秘力量

    2024-07-12 22:22:02       21 阅读
  3. LLM生成nvidia-h100-tensor-core-hopper-whitepaper.pdf摘要

    2024-07-12 22:22:02       19 阅读
  4. 介绍一下Feed流

    2024-07-12 22:22:02       18 阅读
  5. Influxdb v2.x的基本概念

    2024-07-12 22:22:02       18 阅读
  6. P3378 【模板】堆 题解

    2024-07-12 22:22:02       20 阅读
  7. Spring源码二十四:Bean流程探讨

    2024-07-12 22:22:02       22 阅读
  8. 信息收集简介

    2024-07-12 22:22:02       19 阅读
  9. 有哪些好用的项目管理工具?

    2024-07-12 22:22:02       21 阅读
  10. 拦截HTTP的多种方式

    2024-07-12 22:22:02       23 阅读
  11. 如何使用这个XMLHttpRequest?

    2024-07-12 22:22:02       20 阅读