C++ 快速排序未正确排序数组
C++ Quick-sort is not sorting the array properly
你好,我得到了一个包含 10 个元素的数组。[0...9].里面有数字 - [0,1,2,...,8,9]。我正在尝试对数组进行降序排序,但我得到的不是 [9,8,...,2,1],而是 [ 4 3 2 1 0 5 6 7 8 9 ]。
我的快速排序代码。
void q_n(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
/* partition */
while (i <= j) {
while (arr[i] > pivot)
i++;
while (arr[j] < pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
q_n(arr, left, j);
if (i < right)
q_n(arr, i, right);
}
任何人都可以帮我解决这个问题吗?
我发现了问题。太蠢了。不知道为什么会这样。问题不在于 qsort 代码,而在于调用函数。
q_n(array, 0, sizeof(int));
改为:
q_n(array, 0, 9);
并且工作得很好。
如果您不必实现快速排序,请使用内置的
:qsort(A, n, sizeof(int), compare_function);
其中 A
是一个 int
数组,n 是数组中元素的数量,您必须指定一个比较函数:
int compare_function(const void *ptr1, const void *ptr2)
{
int tptr1 = *(int*)ptr1;
int tptr2 = *(int*)ptr2;
return tptr2 - tptr1;
}
使用 return tptr1 - tptr2;
表示升序,使用 return tptr2 - tptr1;
表示降序
编辑:我只是复制粘贴了以前的代码,没有注意到int-float
错误。以下是qsort
如何为想要使用它的人工作的完整示例:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int compare_function(const void *a, const void *b)
{
return *(int*)a - *(int*)b; //ascending
//return *(int*)b - *(int*)a; //descending
}
int main()
{
int A[100];
srand(time(NULL));
for(int i=0; i<100; ++i)
{
A[i] = rand();
}
qsort(A, 100, sizeof(int), compare_function);
for(int i=0; i<100; ++i)
{
printf("%dn", A[i]);
}
return 0;
}
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序