簡體   English   中英

如何將表達式放入 Quicksort 的 A[]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM