C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
C++ quicksort in one function with 2 parameters (___ _____, int length)
我的任务是在一个具有2个参数(___ ____,int length(的函数中实现快速排序。 我有一个代码片段,我必须在其中实现快速排序。
#include <cstdlib>
#include <iostream>
void qsort(___ ____, int length);
int main(int argc,char** argv){
int array[127];
for(int i = 0; i < 127; ++i)
{
array[i] = rand();
}
qsort(____, 127);
for(int i = 0; i < 127; ++i)
{
std::cout << array[i] << " ";
}
std::cout << std::endl;
return 0;
}
void qsort(___ ____, int right){
....
}
我对qsort的方法是:
void qsort( int *array, int right){
std::vector<int> less;
std::vector<int> equal;
std::vector<int> greater;
if (right <= 1){
return;
}
else
{
int mid = right/2;
int pivot = arr[mid];
for (int i = 0; i < 127; i++)
{
if (array[i] < pivot){
less.push_back(arr[i]);
}
if (array[i] == pivot){
equal.push_back(arr[i]);
}
if (array[i] > pivot){
greater.push_back(arr[i]);
}
}
int *less_a = less.data();
int *equal_a = equal.data();
int *greater_a = greater.data();
qsort(less_a, sizeof(less_a));
qsort(greater_a, sizeof(greater_a));
array = less_a + equal_a + greater_a;
}
}
我知道其中有多个语法错误,但"一般逻辑应该没问题"。
我的第一个问题是 qsort 获取一个数组作为参数,因为如果我查看哪个元素大于或小于枢轴,我就不能使用数组,因为我不知道它们的大小。所以我想我可以用向量做一个解决方法,最后我将它们转换为数组......
我的第二个问题是 qsort 必须是无效的,所以我不知道最后如何准确操作数组......
在我看来,qsort(( 的第一个参数必须是数组。 末尾的串联也是错误的,它只是实际连接的"占位符"。
我很高兴得到任何形式的帮助。 我在 Python 中实现了这个解决方案,它工作正常,如果有人想看它,我也可以上传它,但我无法在 C++ 中实现它。
快速排序是就地操作。意味着您将仅修改原始数组。无需创建额外的数组。这是你两个问题的答案。
试试这个代码
void qsort(int* xArray, int xSize)
{
int lPivot = xArray[xSize-1];
int lIndexOfLargestElement = 0;
for (int i = 0; i < xSize-1; i++)
{
if (xArray[i] < lPivot)
{
// Swap largest element with this
int lTmp = xArray[i];
xArray[i] = xArray[lIndexOfLargestElement];
xArray[lIndexOfLargestElement] = lTmp;
lIndexOfLargestElement++;
}
}
// swap pivot with xArray[lIndexOfLargestElement]
int lTmp = xArray[lIndexOfLargestElement];
xArray[lIndexOfLargestElement] = xArray[xSize-1];
xArray[xSize-1] = lTmp;
if (lIndexOfLargestElement > 1)
qsort(xArray, lIndexOfLargestElement);
if (xSize-lIndexOfLargestElement-1 > 1)
qsort(xArray+lIndexOfLargestElement+1, xSize-lIndexOfLargestElement-1);
}
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- c++快速排序算法中500000排序整数数组的Seg错误
- 整数的快速排序算法
- 使用二进制堆从数组中获取前x个整数会更快吗?还是使用快速排序
- 手工编码的快速排序在较小的整数上比较慢