gpt4 book ai didi

c - 如何将固定主元的迭代快速排序更改为随机主元的迭代快速排序?

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:18 26 4
gpt4 key购买 nike

我发现这段代码用于使用固定主元进行快速排序。它始终将给定表格的右侧元素作为枢轴。我希望它以随机元素为轴心。我认为 x 在这里是一个支点,所以我认为将它更改为给定列表中的随机元素是个好主意,但事实证明它不起作用。

void swap ( int* a, int* b )
{
int t = *a;
*a = *b;
*b = t;
}


int partition (int arr[], int l, int h)
{
int x = arr[h];
int i = (l - 1);
for (int j = l; j <= h- 1; j++)
{
if (arr[j] <= x)
{
i++;
swap (&arr[i], &arr[j]);
}
}
swap (&arr[i + 1], &arr[h]);
return (i + 1);
}

void quickSortIterative (int arr[], int l, int h)
{
int stack[ h - l + 1 ];
int top = -1;

stack[ ++top ] = l;
stack[ ++top ] = h;

while ( top >= 0 )
{
h = stack[ top-- ];
l = stack[ top-- ];

int p = partition( arr, l, h );

if ( p-1 > l )
{
stack[ ++top ] = l;
stack[ ++top ] = p - 1;
}
if ( p+1 < h )
{
stack[ ++top ] = p + 1;
stack[ ++top ] = h;
}
}
}

我试过换行

int x = arr[h];

swap(&arr[i+1], &arr[j]);

int r = l+rand()%(h-l);
int x = arr[r];

然后

swap(&arr[i+1], &arr[r]);

但排序不正确。显然我在这里做错了什么。请帮忙。

最佳答案

您的分区函数假定主元位于分区的末尾。考虑先将您的随机枢轴移动到分区的末尾。

即添加

swap(&arr[r], &arr[h]);

在选择你的支点之后。

关于c - 如何将固定主元的迭代快速排序更改为随机主元的迭代快速排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15516274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com