【C语言】快排(霍尔法)的底层逻辑——二叉树分治

在这里插入图片描述

霍尔快排代码:

void Swap(int* a, int* b)
{
   
	int tmp = 0;
	tmp = *a;
	*a = *b;
	*b = tmp;
}
void QuickSort(int* a, int begin, int end)
{
   
	if (begin >= end)
		return;
	int left = begin,right = end;
	int keyi = left;
	while (left < right)
	{
   
		while(left<right&&a[right] >= a[keyi])
			right--;
		while (left < right && a[left] <= a[keyi])
			left++;
		Swap(&a[left], &a[right]);
	}
	Swap(&a[left], &a[keyi]);
	keyi = left;
	QuickSort(a, begin, keyi - 1);
	QuickSort(a, keyi + 1, end);
	
}

逻辑:

left和right往中间走,right先走,找数值比a[keyi]小的
left后走,找数值比a[keyi]大的
最后当left和right相遇时,把a[left]和a[keyi]的值交换,并把下标left和keyi也交换
这时候,以keyi为根节点,左边看成左子树,右边看成右子树,只要左右都各自排成有序,整个数组就有序了
所以接下来进行左子树和右子树的递归
在这里插入图片描述

易错点:

在这里插入图片描述
这个条件就控制了当递归到只剩一个节点和没有节点时,就返回
在这里插入图片描述
两个子循环的条件也要加上left<right
否则如果没有比a[keyi]小的数,right就会一直减减,导致越界;没有比a[keyi]大的数left就会一直加,导致越界

相关推荐

  1. 实现(纯C语言版)

    2024-01-29 19:48:05       50 阅读
  2. 遍历C语言

    2024-01-29 19:48:05       46 阅读

最近更新

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

    2024-01-29 19:48:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 19:48:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 19:48:05       87 阅读
  4. Python语言-面向对象

    2024-01-29 19:48:05       96 阅读

热门阅读

  1. Mysql学习笔记第八章—索引与范式

    2024-01-29 19:48:05       62 阅读
  2. MySQL45讲 -- MYSQL中的锁

    2024-01-29 19:48:05       55 阅读
  3. C语言标准的输入输出

    2024-01-29 19:48:05       62 阅读
  4. C++循环嵌套和break语句

    2024-01-29 19:48:05       57 阅读
  5. BGP实验

    BGP实验

    2024-01-29 19:48:05      51 阅读
  6. 2024美赛数学建模E题思路+模型+代码+论文

    2024-01-29 19:48:05       42 阅读
  7. 【C语言】(7)输入输出

    2024-01-29 19:48:05       60 阅读
  8. 2024美赛数学建模C题思路+模型+代码+论文

    2024-01-29 19:48:05       59 阅读
  9. Midjourney图片生成描述词记录(今天一天)

    2024-01-29 19:48:05       46 阅读
  10. 随机生成UI不重叠

    2024-01-29 19:48:05       51 阅读
  11. vmware安装centos8-stream

    2024-01-29 19:48:05       58 阅读
  12. Groovy语言学习

    2024-01-29 19:48:05       53 阅读