Quick Sort ( simple verson )

本文提供了快速排序算法的手写实现代码,并使用C语言风格。该实现采用递归方式,通过选择枢轴元素来划分数组,进而达到排序目的。

备份一下手打快排的写法。

只能算是备份吧,没有解释快排的思想,以 int 为例。

没有考虑什么特殊情况,比如传入不合法指针等

/* 模仿一波 C++ 的 sort() 的接口
 * 只传排序区间的首尾指针
 */
void quick_sort(int *left, int *right)
{
	/* 枢轴值的备份 */
	int pivot;
	
	/* 将[left,right) 变成 [a,b](前闭后闭) */
	int *a = left, *b = right - 1;
	
	/* 如果 a>b,区间不合法(不知道有没有这种情况)
	 * 如果 a=b,区间长为1,已经有序,不用再排
	 */
	if(a >= b)
		return;
	
	/* 选序列第1个值作枢轴,也可以是其它 */
	pivot = *a;
	
	while(a < b)
	{
		/* 先从后往前找下1个比pivot小的值的位置 */
		while(a < b && *b >= pivot)
			--b;
		
		/* 如果找到了,直接放到 a 所指位置
		 * 该位置的值已经备份
		 * 然后让 a++
		 */
		if(a < b)
			*a++ = *b;
		
		/* 再从前往后找下1个比pivot大的值的位置 */
		while(a < b && *a <= pivot)
			++a;
		
		/* 如果找到,就放在 b 所指位置
		 * 并让 b--
		 */
		if(a < b)
			*b-- = *a;
	}
	
	/* 循环之后一定是 a == b
	 * 所指位置就是枢轴要去的位置
	 * 枢轴归位
	 */
	*a = pivot;
	
	/* 分治地处理枢轴左边的区间
	 * 依然是传前闭后开的区间
	 */
	quick_sort(left, a);
	
	/* 分治地处理枢轴右边区间
	 * 因为枢轴已到位,不用再参于排序
	 * 所以 a+1 把枢轴位置排除出待排序区间
	 */
	quick_sort(a+1, right);
}
简单测试了一下,是可以的
在麒麟系统中遇到 `unrecognized OpenGL version` 错误通常表明系统无法正确识别或加载 OpenGL 的版本。该问题可能与显卡驱动、系统库文件或应用程序的配置相关。 ### 原因分析 1. **显卡驱动未正确安装或版本过旧**:OpenGL 的实现依赖于显卡驱动程序。如果显卡驱动未正确安装或版本较旧,则可能导致 OpenGL 版本无法被识别。 2. **缺少必要的库文件**:某些情况下,系统可能缺少 `libGL` 或 `mesa` 相关的库文件,导致 OpenGL 无法正常运行。 3. **应用程序请求的 OpenGL 版本过高**:某些应用程序可能要求使用较新的 OpenGL 版本(如 OpenGL 4.x),而系统或显卡仅支持较低版本(如 OpenGL 3.x)[^1]。 ### 解决方案 #### 1. 更新显卡驱动 确保系统中已安装最新的显卡驱动。对于 NVIDIA 显卡,可使用以下命令安装官方驱动: ```bash sudo apt update sudo apt install nvidia-driver ``` 对于 AMD 或 Intel 显卡,可安装开源驱动: ```bash sudo apt install xserver-xorg-video-amdgpu sudo apt install xserver-xorg-video-intel ``` 安装完成后,重启系统以确保驱动生效。 #### 2. 安装或更新 Mesa 库 Mesa 是 Linux 系统中用于提供 OpenGL 支持的开源图形库。若系统中未安装或版本过旧,可能导致 OpenGL 版本无法识别。可通过以下命令安装或更新 Mesa: ```bash sudo apt install libgl1-mesa-glx libgl1-mesa-dev ``` 如果系统支持 Vulkan,也可安装完整版本: ```bash sudo apt install mesa-vulkan-drivers ``` #### 3. 检查 OpenGL 版本支持 使用以下命令检查当前系统支持的 OpenGL 版本: ```bash glxinfo | grep "OpenGL version" ``` 输出应显示当前 OpenGL 版本,例如: ``` OpenGL version string: 4.6.0 NVIDIA 470.82.01 ``` 如果输出显示版本异常或未显示任何内容,则表明 OpenGL 未正确配置或驱动未加载。 #### 4. 使用 `glxgears` 测试 OpenGL 功能 安装 `glxgears` 可快速测试 OpenGL 是否正常工作: ```bash sudo apt install mesa-utils glxgears ``` 如果窗口正常显示旋转的齿轮,则 OpenGL 已正常工作。如果出现错误,则需进一步排查驱动或库文件问题。 #### 5. 调整应用程序的 OpenGL 配置 某些应用程序(如游戏引擎或图形工具)允许手动指定 OpenGL 版本。可在其配置文件或启动参数中设置较低版本(如 OpenGL 3.3)以兼容当前系统。 例如,在使用 SDL2 的程序中,可在初始化前设置所需的 OpenGL 版本: ```c SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); ``` #### 6. 检查是否使用了虚拟机或远程桌面 在虚拟机或远程桌面环境中,可能无法正确传递 GPU 资源,导致 OpenGL 无法正常工作。建议在物理机上测试,或启用 GPU 虚拟化支持(如 VMware 的 3D Acceleration)。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值