排序算法总结(C++描述)

基于Java中字符串indexof() 的使用方法 今天小编就为大家分享一篇基于Java中字符串indexof() 的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

排序算法可以分为两类,低级排序算法和高级排序算法

低级排序算法:选择排序,冒泡排序,插入排序,希尔排序

高级排序算法:堆排序,归并排序,快速排序,排序树,基数排序

1 选择排序

  1) 在对数组元素遍历的过程中,选择最大的元素放入末端的位置,或者选择最小的元素放入开头,不断压缩循环区间,直到只剩一个元素。放的动作通过交换来执行。

   代码如下

   函数主体由寻找最大元素的索引和交换元素组成

void selectionSort(int* array, int size)
{
	for (int n = size; n > 1; n--)
	{
		int j = indexOfMax(array, n);
		swap(array[j], array[n - 1]);
	}
}
int indexOfMax(int* array, int size)
{
	int result = 0;
	for (int i = 1; i < size; ++i)
	{
		if (array[result] < array[i])
			result = i;
	}
	return result;
}
void swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

   2)及时终止的选择排序

   为了防止对本身就已经有序的数组排序,需要设计及时终止的选择排序。

void selectionSortEffeic(int* array, int size)
{
	bool sorted = false;
	for (int n = size; n > 1&&!sorted; n--)
	{
		int indexOfMax = 0;
		sorted = true;
		for (int i =1; i < n; i++)
		{
			if (array[indexOfMax] < array[i])
				indexOfMax = i;
			else
				sorted = false;
		}
		swap(array[indexOfMax], array[n - 1]);
	}
}

2 冒泡排序

 1) 在一次冒泡过程中,依次比较相邻元素,最终会把最大元素放在末尾。下一次冒泡过程在新的区间(去掉了最右边的元素)总进行。

  代码如下

  函数主体由n-1次冒泡组成

void bubbleSort(int* array, int size)
{
	for (int n = size; n > 1; n--)
		bubble(array, n);
}
void bubble(int* array, int size)
{
	for (int i = 0; i < size-1; i++)
	{
		if(array[i]>array[i+1])
		   swap(array[i], array[i + 1]);
	}
}

  2)及时终止的冒泡排序

     防止数组在有序的情况下继续冒泡

void bubbleSortEffeic(int* array, int size)
{
	int sorted=false;
	for (int n = size; n > 1&&!sorted; n--)
	{
		sorted = true;
		for (int i = 0; i < n - 1; i++)
		{
			if (array[i] > array[i + 1])
			{
				sorted = false;
				swap(array[i], array[i + 1]);
			}
		}
	}
}

3 插入排序

   将后面的元素插入前面的有序区间,直到有序区间扩展到原区间的大小。有序区间初始化为第一个元素。

  代码如下

  函数主体由n-1次插入构成

void insertionSort(int* array, int size)
{
	for (int i = 1; i < size; i++)
	{
		int t = array[i];
		insert(array, i, t);
	}
}
void insert(int* array, int size, int x)
{
	int i;
	for (i = size - 1; i >= 0 && x < array[i]; i--)
	{
		array[i + 1] = array[i];
	}
	array[i + 1] = x;
}

4 希尔排序

  希尔排序的基本思想是先将整个待排序列划分成为若干个子序列,分别对子序列进行排序,然后逐步缩小划分子序列的间隔,并重复上述操作,直到划分的间隔变为0。

代码如下:

void shellSort(int* array,int size)
{
    int gap=size/2;
    bool sorted=false;
    while(gap>=1){
        do{
           sorted=true;
           for(int i=0;i<size-gap;i++){
              if(array[i]>array[i+gap]){
                 swap(array[i],array[i+gap]);
                 sorted=false;
                 }
               }
          }while(!sorted);
       gap/=2;
    }
}

5 堆排序

   堆排序的基本思想建立在大根堆的基础上。先用一个数组初始化大根堆,然后从大根堆中提取最大元素放入数组的最右边位置,然后删除此最大元素重建大根堆,当然这里的删除不是真的删除元素本身,而是在下次建立大根堆的时候缩小数组范围,不要计入最大元素。重复此过程,直到大根堆中只剩下一个元素,此元素肯定是最小元素,排序完毕。

 代码如下, 函数主体由大根堆的初始化和大根堆的调整两部分组成,核心代码是大根堆的调整函数,用到了二叉树的一些性质。

   

void heapSort(int* array,int size)
{
    int root=(size-2)/2;   //这里的根节点包含数组的索引为0的位置
    for(;root>=0;root--){//大根堆初始化
         heapAdjust(array,root,size);
        }
     int n=size;
     while(n>1){      //大根堆调整
        swap(array[0],array[n-1]);
         --n;
        heapAdjust(array,0,n);
     }
}
void heapAdjust(int* array,int root,int size)
{
    int child=2*root+1;
    int rootElement=array[root];
    while(child<size){
        if(child<size-1&&array[child]<array[child+1]){
            ++child;
          }
        if(rootElement>=array[child]){  //符合大根堆的特性
           break;}
        array[(child-1)/2]=array[child];  //向上(往根节点方向)传递大的元素
        child=2*child+1;    //孩子向下延伸,中间的位置空着待定
     }
    array[(child-1)/2]=rootElement;
}

6 归并排序

   1) 归并排序的基本思想是把待排元素序列分割成两个子序列(长度不一定相等,按中间值分割),然后给每一个子序列排序,然后再将它们合并成一个序列。

   代码如下,函数是递归的形式,中间代码是两个有序数组的合并方法

void mergeSort(int* array,int left,int right)
{
     if(left<right){//递归条件
        int mid=(left+right)/2;
         mergeSort(array,left,mid);
         mergeSort(array,mid+1,right);
         merge(array,left,mid,right);
      }
}
void merge(int* array,int left,int mid,int right)
{
     int len=right-left+1;
     int* atemp=new int[len];
     int i=0,j=mid+1,k=0;
     while(i<=mid&&j<right){
       if(array[i]<array[j]){
           atemp[k++]=array[i++];
        }else{
           atemp[k++]=array[j++];
        }
     }
    while(i<=mid){
     atemp[k++]=array[i++];
    }
    while(j<=right){
     atemp[k++]=array[j++];
    }
    copy(atemp,atemp+len,array+left);
    delete [] atemp;
}

2)可以看到上述归并程序既有递归,又有元素复制,能不能消除复制呢。有一种迭代算法也可以进行归并排序,称之为直接归并排序,首先将两个相邻的大小为1的子序列归并,然后将每两个相邻大小为2的子序列归并,反复此过程直到只剩下一个有序序列。轮流地将元素从a归并到b,从b归并到a,实际上消除了从b到a的复制。

   函数主体由log2(n)次归并构成,这里的归并过程比较特殊,在归并之前要保证归并的左右边界符合规范,也就是两个归并段的长度是一样的,如果出现了少于两个满数据段时要特殊处理。代码如下,

void mergeSort(int a[], int n)
{//直接归并排序,主要的优点是消除了从b到a的复制过程
	int* b = new int[n];
	int segmentSize = 1;
	while (segmentSize < n)
	{
		mergePass(a, b, n, segmentSize);
		segmentSize *= 2;
		mergePass(b, a, n, segmentSize);
		segmentSize *= 2;
	}
	delete[] b;
}
void mergePass(int x[], int y[], int n, int segmentSize)
{//将x归并到y
	int i = 0;
	while (i <= n - 2 * segmentSize){   //合并前的两段数据段都有segmenSize个元素
		merge(x, y, i, i + segmentSize - 1, i + 2 * segmentSize - 1);
		i = i + 2 * segmentSize;
	}
	if (i + segmentSize < n){//剩余两个数据段(这两个数据段其中一段不是满数据段)
		merge(x, y, i, i + segmentSize - 1, n - 1);
	}else{//只剩一个数据段,复制到y
		copy(x + i, x + n, y + i);
	}
}
void merge(int x[], int y[],int startOfFirst,int endOfFirst,int endOfSecond)
{
	int first= startOfFirst,second=endOfFirst+1;
	int result = startOfFirst;
	while ((first <= endOfFirst) &&(second <= endOfSecond)){
		if (x[first] <= x[second]){
			y[result++] = x[first++];
		}else{
			y[result++] = x[second++];
		}
	}
	while(first <= endOfFirst){
		y[result++] = x[first++];
	}
	while (second<= endOfSecond){
		y[result++] = x[second++];
	}
}

7 快速排序

   快速排序的基本思想的是分而治之,把n个元素分成三段,左段,中间段,右段,左段的元素都小于等于中间段元素,右段元素都大于等于中间段元素,对左段和右段独立排序,并且排序后不用合并。

  函数主体由递归形式构成,代码如下,

void quickSort(int* array,int left,int right)
{
    if(left<right){//递归条件
       int i=left-1;
       int j=right+1;
       int midElement=array[(let+right)/2];
       while(true){
           while(array[++i]<midElement);//找左边大于等于标杆的元素
           while(array[--j]>midElement);//找右边小于等于标杆的元素
             if(i<j){//找到了,交换
               swap(array[i],array[j]);
              }else{
               break; //没找到,则分成2个子序列,继续此操作
              }
        }
        quickSort(array,left,i-1);
        quickSort(array,j+1,right);
    }
}

8 排序树

   排序树的基本思想基于二叉搜索树的性质,在二叉搜索树中关键字有这样的性质:左节点<根<右节点,那么对二叉搜索树进行中序遍历就是二叉树节点上元素的排序结果。

   基本方法是采用两个辅助数组来表示元素与元素之间在树中的关系,两个辅助数组分布是左孩子索引和右孩子索引。函数主体由两部分组成,1)构造关系树,2)中序遍历输出结果。

void treeSort(int*array, int size)
{
	//用2个辅助数组来表示元素与元素之间在树中的关系
	int *lChild = new int[size];  //左孩子索引
	int *rChild = new int[size];  //右孩子索引

	//将各节点左右子节点指针均置为-1,表示没有左右子节点
	for (int i =0; i < size; ++i){
		lChild[i] = -1;
		rChild[i] = -1;
	}
	//从第2个数开始构造树
	for (int i = 1; i < size; ++i)
	{
		int root = 0; //根节点
		while (true)
		{
			int compare = array[i] - array[root];
			if (compare > 0){//比当前值大,进入右子树
				if (rChild[root] ==-1){//右子树为空,直接放置该数在此节点位置
					rChild[root] = i;
					break;
				}else{//右子树不为空,则以右节点为新子树根节点继续放置
					root = rChild[root];
				}
			}else{//比当前值小,进入左子树
				if (lChild[root]== -1){
					lChild[root] = i;
					break;
				}else{
					root = lChild[root];
				}
			}
		}
	}
	//保存排序树的中序遍历结果
	int* inOrder = new int[size];
	TreeInOrder(array,inOrder,0,lChild,rChild);
	//将排序好的中序数组复制到原数组
	copy(inOrder,inOrder+size,array);
	delete inOrder;
	delete rChild;
	delete lChild;
}
void TreeInOrder(int* array, int* inOrder, int root, int* lChild,int* rChild)
{//中序遍历
	static int i = 0;
	if (root!= -1)  //节点不为空
	{
		TreeInOrder(array,inOrder,lChild[root], lChild, rChild);//遍历左子树
		inOrder[i++] = array[root];  //保存当前值
		TreeInOrder(array,inOrder,rChild[root], lChild, rChild);//遍历右子树
	}
}

9 基数排序

  基数排序的基本思想是箱子排序,把数字按照基数(可以取10,100,1000等)划分,然后对低位至高位依次进行箱子排序,因为箱子排序是稳定排序,所以次低位相同的节点,按照最低位数字排序所得到的次序保持不变,这就保证了可以从低位至高位的排序得到最终整个数的排序结果。

    需要用到链表的数据结构,代码如下

template<typename T>
void radixSort(int r,int d)          //r为基数,d为按基数分解的个数
{
	int m,theBin;
	for (int i = 1; i <= d; ++i)              //总共排序d次
	{ 
		//创建并初始化箱子,箱子的大小就是就是基数r的大小
		chainNode<T>**bottom, **top;
		bottom = new chainNode<T>*[r];//链表节点构成的数组,top和bottom表示不同的数组段的首尾节点
		top = new chainNode<T>*[r];
		for (int b = 0; b < r; ++b)
			top[b] = NULL;
		//将链表在的节点分配到箱子
		for (; firstNode != NULL; firstNode = firstNode->next)//分配完之后链表也就变成了空表
		{
			m = pow(r, i);
			theBin = firstNode->element%m / pow(r, i - 1);
			if (top[theBin] == NULL)
				top[theBin] = bottom[theBin] = firstNode;
			else {
				bottom[theBin]->next = firstNode;
				bottom[theBin] = firstNode;
			}
		}
          //把箱子中的节点收集到有序链表
			chainNode<T>*y = NULL;     //负责连接各段链表
			for(int theBin=0;theBin<r;++theBin)
				if (top[theBin] != NULL)
				{
					if (y == NULL)               
						firstNode = top[theBin];  //将第一个非空箱子放入链表
					else
						y->next = top[theBin];    //后续箱子接着放入
					y = bottom[theBin];
				}
			if (y != NULL)
				y->next = NULL;    //将表的末尾下一节点置空
			delete [] bottom;
			delete [] top;
		}

}

链表节点代码

template<typename T>
struct chainNode
{
   chainNode():next(nullptr){}
   chainNode(const T& element){this->element=element;}
   chainNode(const T& element,chainNode* next)
   {
     this->element=element;
     this-next=next;
   }
   chainNode<T>* next;
   T element;
}

标注:对于一般的基数r,相应的数字分解式为x%r,(x%r^2)/r,(x%r^3)/r^2,...

各种算法的复杂度分析如下:

高效低功耗设计:PMOS电子开关在墨水屏与ADC采样电路中的创新应用 本文深入探讨了PMOS电子开关在低功耗设计中的创新应用,特别是在墨水屏和ADC采样电路中的关键作用。通过详细分析PMOS的导通机制和近乎零静态功耗特性,展示了其在待机低功耗场景下的显著优势,并提供了实用的电路设计技巧和元器件选型建议,帮助工程师实现极致的功耗优化。 阅读详情

相关推荐

【Allegro学习笔记】常规标贴封装创建-0402封装创建实例

摘要 本文主要介绍如何使用Allegro制作表面贴装封装。 所使用的软件 使用Allegro制作常规贴片封装主要使用的软件有Pad Designer和Allegro 1 0402类封装制作 1.1 0402类封装焊盘分析 0402封装尺寸图如图1...

Honglong 1万+

F3 查找数组元素最大值 (10 分)

本题要求实现一个函数,查找数组中最大元素的下标。例如数组为{1,3,5,7,9},则该函数应该返回4。题目输入保证数组元素各不相同。 函数接口定义: int indexOfMax(int *array, int size); 其中 array 和 size 是用户传入的参数。 array 是数组首地址; size 是数组元素的个数。函数须返回数组中最大元素的下标(从0开始)。 裁判测试程序样例:...

姚军 4989

【DexGraspNet与多指手抓取算法详解】第四章 抓取检测网络架构设计

图 $G=(V, E)$ 包含两类节点:指尖节点 $V_{tip} = \{v_{tip}^i\}_{i=1}^{N_{finger}}$ 与物体表面节点 $V_{obj} = \{v_{obj}^j\}_{j=1}^{N_{surf}}$。节点特征包含位置 $x \in \mathbb{R}^3$ 、法向 $n \in \mathbb{R}^3$ 及视觉特征 $f \in \mathbb{R}^d$。

VectorShift的博客 441

最大子段和问题

int max_value(int array[],int size,int &begin,int &end) { int maxvalue=0;//用于保存当前数组的最大值 int array_temp=0;//用于保存数组当前的值 int temp_begin,temp_end; for (int array_index=0;array_index0) { array_temp+=array[array_index]; temp_end=array_index;

wind的专栏 469

2026 年 AI 大模型资讯深度研究报告 / 2026 年 3 月 11 日

2026 年已成为 AI 大模型发展的关键拐点年。从 2023 年 ChatGPT 开启的技术奇点,历经多模态突破、推理能力崛起,至 2025 年形成产业爆发态势,AI 大模型正从"技术验证期"迈向"产业落地期"。核心发现技术突破: OpenAI 于 2026 年 3 月 6 日发布 GPT-5.4,首次实现原生计算机操控能力,在 OSWorld 桌面操控测试中以 75% 成功率超越人类 (72.4%),标志着 AI 从"对话工具"向"自主数字员工"的时代跃迁市场格局。

AI天才研究院 787

【忍者算法】从拼积木到最长连续序列:一道别出心裁的数组题目|LeetCode 128 最长连续序列

本题核心:通过预处理数据结构来优化查找!

忍者算法的博客 738

数组常用算法学习

1. 数组练习题【重点】 1.1 找出数组中最大值的下标位置 /* 方法分析: public static 不要问 返回值类型: 最大值的下标位置,int类型 方法名: maxIndexOfArray 最大值下标位置 形式参数列表: 需要一个int类型数组 (int[] array) 方法声明: public static int maxIndexOfArray(int[...

m0_37696726的博客 264

Qt c++ llama.cpp 运行 LLaMA-3-8B 中文对话机器人(多模态输入)

助手:

寒寒豆豆软件公司的博客 222

【C++数据结构】选择排序列表与及时终止的选择排序列表

【C++数据结构】选择排序

Jasmine-Lily的博客 497

【重温童年】基于tkinter模块设计的Q宠大乐斗武器升星模拟器:重温经典,畅享休闲时光

与传统的Q宠大乐斗不同,这款模拟器还加入了一个创新的功能——自定义升星概率。玩家可以根据自己的喜好和策略,为不同的武器设置不同的成功率和降级率。比如,你可以将“嗜血”这把武器的升星难度设置得极高,以体现其稀有性和强大威力;也可以将“平底锅”这样的普通武器设置得相对容易升星,让玩家在升级过程中感受到更多的成就感。这种自定义的概率设置,不仅增加了游戏的趣味性和挑战性,还让玩家在升级过程中有了更多的策略和选择。你可以根据自己的武器库和卷轴数量,制定出最合适的升级计划,从而在游戏中占据先机。

nmdbbzcl的博客 1238

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2630

C语言学习

c语言学习时我遇到的易错点

2301_76339996的博客 2256

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 641

常用排序算法描述及C++代码实现

文章目录前言一、插入排序 O(n²)1.算法描述2.代码实现二、选择排序 O(n²)1.算法描述2.代码实现三、冒泡排序 O(n²)1.算法描述2.代码实现四、快速排序 O(nlogn)1.算法描述2.代码实现五、归并排序 O(nlogn)1.算法描述2.代码实现 前言   排序(sort),顾名思义,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律。在ACM竞赛题目中,根据数据规模和数据特性选择合适的排序算法常常作为解决问题的第一步,在相关行业的

m0_62021646的博客 1078

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《算法》系列——排序算法之初级排序算法(C++描述)

《算法》系列 知识整理(C++描述) 算法学习历程 排序算法 查找算法 图 字符串问题 智能算法 学习目录 排序算法 初级排序算法 归并排序 快速排序 优先队列 排序算法的应用 初级排序算法 选择排序 算法宏观描述:首先,在数组中选择其中最小(或最大)的一个元素,将其与第一个元素进行交换,重复选择操作,在剩余的数组中选择最小的元素,将其与第二个元素交换,依次推类。 在宏观描...

x__Sherlock的博客 447

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

常见几种排序算法的C++描述

首先看一下几种常见排序的特性插入排序void insertSort(vector<int> & arr) { int sz = arr.size(); int tmp; for (int i = 1; i < sz; ++i){ tmp = arr[i]; int j; for (j = i; j > 0 && tmp < ar

eversliver的专栏 420

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

排序算法的C++描述(code)

一般使用的八大排序算法是:插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序、堆排序、基数排序 以下均为从小到大排序 冒泡排序 void bubbleSort(vector<int> &s){ for (int i = 0; i < s.size(); i++){ for (int j = 0; j < s.size() - 1 - i; j++){ if (s[j] > s[j + 1]) swap(s[j]

weixin_42108090的博客 186

7.排序算法小结-C++描述

数据结构中排序算法的C++描述

白火亮 391

C/C++语言描述的排序算法

排序算法笔记,Cpp版,学习记录用 #include &lt;iostream&gt; #include&lt;vector&gt; using namespace std; #include&lt;cstring&gt; void swap(int &amp;_a,int &amp;_b) { int temp=_a; _a=_b; _b=temp; } //快排 void Pa...

wzw1596483638的博客 199

几种常见排序算法的C++描述

基本的排序算法有如下特点: 1.几种容易的算法都是以O(N2)排序的 2.Shell排序编程简单,其也是以O(N2)排序的,在实践中用的很多 3.复杂的排序算法往往都是按照O(NlogN)尽心排序的 4.任何通用的排序算法都需要NlogN次比较。 还有两个定理应该记一下,证明略: 1. N个互异数组的平均逆序数是N(N-1)/4 2. 通过交换相邻元素进行排序的任何算法平均都需要O(...

weixin_34341117的博客 130

最全排序算法(C/C++描述),包含原理讲解,算法分析

所有的排序算法中,从简单到复杂,从适用于小数据量到适用于大数据量,从稳定到不稳定,各有各的特点和应用场景。冒泡排序: 简单,适用于小数据量,时间复杂度高,空间复杂度低。选择排序: 简单,适用于小数据量,时间复杂度高,空间复杂度低。插入排序: 简单,适用于近乎有序的小数据量,时间复杂度适中,空间复杂度低。归并排序: 稳定,高效,适用于大数据量,时间复杂度低,但空间复杂度高。快速排序: 高效,但在最坏情况下时间复杂度高,适用于大数据量,空间复杂度低。堆排序。

LHLYX的博客 1182

《算法》系列——排序算法之归并排序算法(C++描述)

《算法》系列 知识整理(C++描述) 算法学习历程 排序算法 查找算法 图 字符串问题 智能算法 学习目录 排序算法 初级排序算法 归并排序 快速排序 优先队列 排序算法的应用 本文主要内容 本文主要讲述归并排序算法,在介绍归并排序的思想基础上,分析自顶向下的归并排序及自底向上的归并排序两种方法,并比较二者的区别。 归并排序 算法宏观描述: 在对一个数组进行排序时,我们可以...

x__Sherlock的博客 757

《算法》系列——排序算法之快速排序算法(C++描述)

《算法》系列 知识整理(C++描述) 算法学习历程 排序算法 查找算法 图 字符串问题 智能算法 学习目录 排序算法 初级排序算法 归并排序 快速排序 优先队列 排序算法的应用 本文主要内容 本文主要针对快速排序算法的思想、实现、复杂度分析、算法改进几个方面展开。 各位看官可以根据需求,从任意一部分开始看起。 快速排序 算法思想 快速排序的基本思想为:将一个数组分成两个子...

x__Sherlock的博客 547

十大经典排序算法(C++代码实现)

文章目录0、算法概述0.1 算法分类0.2 时间复杂度0.3 相关概念1、冒泡排序1.1 算法描述1.2 动图演示1.3 C++代码实现2、选择排序(Selection Sort)2.1 算法描述2.2 动图演示2.3 C++代码实现2.4 算法分析3、插入排序(Insertion Sort)3.1 算法描述3.2 动图演示3.2 C++代码实现4、希尔排序(Shell Sort)4.1 算法描述4.2 动图演示4.3 C++代码实现4.4 算法分析5、归并排序(Merge Sort)5.1 算法描述5.

将~军的博客 1862

C++ 排序算法总结

本文总结了c++的排序算法,并给出了相关算法的模板。

Rosemaker丶xyz的博客 1151

C C++最全【数据结构与算法】之十大经典排序算法,阿里巴巴二面被血虐

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新如果你需要这些资料,可以戳这里获取十大经典算法总结:注意:冒泡排序(Bubble Sort) 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是

2401_84976318的博客 842
上一篇: 深度优先(DFS)和广度优先(BFS)的实现方法
下一篇: LeetCode5 最长回文子串
Jeff_Winger
博客等级 码龄9年 50粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值