[英]How to put the expression in Quicksort's A[]
這是排序算法。 我嘗試根據結構中具有 x 和 y 的字段的總和 (x+y) 的大小降序排序。
我將快速排序降序排列。 但我有一個問題如何處理字段的 sum(x+y)。
typedef struct DATA { double x; double y; double sum} DTYPE;
#define DTYPE double
#define SWAP(aa,bb) {DTYPE tmp; tmp = aa; aa=bb; bb=tmp;}
void sort_201821100(DTYPE A[], int N)
{
int piv;
if (N > 1) {
piv = partition(A, N);
sort_201821100(A, piv);
sort_201821100(A + piv + 1, N - piv - 1);
}
}
int partition(DTYPE A[], int N) {
int P = N / 2;
int i = 0, j = N;
// I need DType.sum struct variable which has sum of DType.x and DType.y, But I have no idea how to implement this line on partition function
A[].sum = A[].x + A[].y;
DTYPE pivot;
SWAP(A[N / 2].sum, A[0].sum);
pivot = A[0].sum;
while (1) {
while ((A[++i].sum > pivot) && (i < N));
while ((A[--j].sum < pivot) && (j > 0));
if (i >= j) break;
SWAP(A[i], A[j]);
}
SWAP(A[0], A[j]);
return j;
}
我想知道如何將 A[].sum 中的表達式放在分區 function 上。
任何回復將不勝感激。 此致。
[更新]
for (i = 0; i < j; i++)
{
A[i].sum = A[i].x + A[i].y;
}
我在源代碼中插入for
代碼。 但錯誤被拋出。
Expression must have a struct or union type.
你的程序有很多錯誤。
typedef struct DATA { double x; double y; double sum} DTYPE;
#define DTYPE double
您將DTYPE
的類型重新定義為double
。 這就是我建議的for
循環不起作用的原因。 拋出的錯誤說明
Member must be a stuct or union
就是因為這個重新定義,現在DTYPE
變成了double
。 所以像double.sum
這樣的操作是非法的 C 代碼。
刪除/更改該行#define DTYPE double
。
此外,您正在這樣做:
DTYPE pivot;
:
pivot = A[0].sum;
您正在嘗試將A[0].sum
(類型為double
)分配給pivot
類型為struct DATA
。
對於您的原始問題,您需要使用for
循環:
for (i = 0; i < j; i++)
{
A[i].sum = A[i].x + A[i].y;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.