你好我有一个包含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);
}
任何人都可以帮我这个吗? ; S
答案 0 :(得分:0)
q_n(array, 0, sizeof(int));
更改为:
q_n(array, 0, 9);
并且工作得很好。
答案 1 :(得分:-3)
如果您不必实施快速排序,请使用内置的:
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("%d\n", A[i]);
}
return 0;
}