news 2026/4/14 21:03:09

C语言 (QuickSort using Random Pivoting)使用随机枢轴的快速排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言 (QuickSort using Random Pivoting)使用随机枢轴的快速排序

本文将探讨如何使用随机枢轴实现快速排序。在快速排序中,我们首先对数组进行原地分割,使得枢轴元素左侧的所有元素都小于枢轴元素,而右侧的所有元素都大于枢轴元素。然后,我们递归地对左右两个子数组执行相同的分割过程。

与归并排序不同,快速排序不需要合并两个已排序的数组。因此,快速排序所需的辅助空间比归并排序更少,这也是它通常优于归并排序的原因。使用随机生成的枢轴可以进一步降低快速排序的时间复杂度。

我们已经讨论了两种流行的数组划分方法——霍尔划分方案和洛穆托划分方案。
建议读者已经阅读过这篇文章,或者知道如何使用这两种划分方案中的任何一种来实现快速排序。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

基于 Lomuto 分区的随机枢轴算法

partition(arr[], lo, hi)
pivot = arr[hi]
i = lo // 用于交换的位置
for j := lo to hi – 1 do
if arr[j] <= pivot then
swap arr[i] with arr[j]
i = i + 1
swap arr[i] with arr[hi]
return i
partition_r(arr[], lo, hi)
r = Random Number from lo to hi
Swap arr[r] and arr[hi]
return partition(arr, lo, hi)
quicksort(arr[], lo, hi)
if lo < hi
p = partition_r(arr, lo, hi)
quicksort(arr, lo , p-1)
quicksort(arr, p+1, hi)

使用 Lomuto 分区法实现:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int partition(int arr[], int low, int high)
{
int pivot = arr[low];
int i = low - 1, j = high + 1;

while (1) {

do {
i++;
} while (arr[i] < pivot);

do {
j--;
} while (arr[j] > pivot);

if (i >= j)
return j;

int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}

int partition_r(int arr[], int low, int high)
{
srand(time(0));
int random = low + rand() % (high - low);

int temp = arr[random];
arr[random] = arr[low];
arr[low] = temp;

return partition(arr, low, high);
}

void quickSort(int arr[], int low, int high)
{
if (low < high) {
int pi = partition_r(arr, low, high);

quickSort(arr, low, pi);
quickSort(arr, pi + 1, high);
}
}

void printArray(int arr[], int n)
{
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}

int main()
{
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}

输出

已排序数组: 1 5 7 8 9 10

时间复杂度:O(N*N)
辅助空间:O(N) // 由于递归调用栈

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 20:57:12

仅限前500名技术决策者获取|2026奇点大会文档理解模型技术路线图(含芯片级优化路径、国产化适配时间表与2027Q2商用许可窗口期)

第一章&#xff1a;2026奇点智能技术大会&#xff1a;文档理解模型 2026奇点智能技术大会(https://ml-summit.org) 核心突破&#xff1a;多模态文档解析架构 本届大会首次公开了DocMind-7B&#xff0c;一款专为复杂企业文档设计的开源文档理解模型。它支持PDF、扫描图像、手写…

作者头像 李华
网站建设 2026/4/14 20:51:35

从材料到认证:Amphenol Aerospace连接器国产替代关键挑战分析

在高端航空航天及军用装备领域&#xff0c;连接器组件承担着传输电力、信号及数据的关键任务&#xff0c;而 Amphenol Aerospace 作为全球领先的航空互连系统供应商&#xff0c;其产品凭借高可靠性、极端环境适应性和严苛标准认证&#xff0c;在商用航空、军工航空、空间系统及…

作者头像 李华
网站建设 2026/4/14 20:46:14

CASS3D三维绘图实战:房地一体项目的高效内业处理

1. 房地一体项目中的三维绘图革命 第一次接触房地一体项目时&#xff0c;我被传统测绘方法的低效震惊了。外业人员扛着全站仪在烈日下奔波&#xff0c;内业同事对着CAD图纸反复修改&#xff0c;一个简单的房屋轮廓图往往需要反复核对三四次。直到我们团队引入CASS3D三维绘图技术…

作者头像 李华