Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,如何在c中打印距离原点最近的2D点? #包括 #包括 无效合并_排序(int a[],int n) { int*tmp_数组=malloc(sizeof(int)*n); 内部_msort(a、n、tmp_阵列); 自由(tmp_阵列); } 无效内部\u msort(int a[],int n,int helper\u数组[]) { int left=n/2,right=n–left; if(n_C_Algorithm - Fatal编程技术网

在这种情况下,如何在c中打印距离原点最近的2D点? #包括 #包括 无效合并_排序(int a[],int n) { int*tmp_数组=malloc(sizeof(int)*n); 内部_msort(a、n、tmp_阵列); 自由(tmp_阵列); } 无效内部\u msort(int a[],int n,int helper\u数组[]) { int left=n/2,right=n–left; if(n

在这种情况下,如何在c中打印距离原点最近的2D点? #包括 #包括 无效合并_排序(int a[],int n) { int*tmp_数组=malloc(sizeof(int)*n); 内部_msort(a、n、tmp_阵列); 自由(tmp_阵列); } 无效内部\u msort(int a[],int n,int helper\u数组[]) { int left=n/2,right=n–left; if(n,c,algorithm,C,Algorithm,您的merge\u sort函数还必须对相应的索引进行排序,并返回排序后的索引数组。类似于: #include <stdio.h> #include <stdlib.h> void merge_sort(int a[], int n) { int *tmp_array = malloc(sizeof(int) * n); internal_msort(a, n, tmp_array); free(tmp_array); } void internal_msort(int

您的
merge\u sort
函数还必须对相应的索引进行排序,并返回排序后的索引数组。类似于:

#include <stdio.h>
#include <stdlib.h>

void merge_sort(int a[], int n)
{
int *tmp_array = malloc(sizeof(int) * n);
internal_msort(a, n, tmp_array);
free(tmp_array);
}
void internal_msort(int a[], int n, int helper_array[])
{
int left = n / 2, right = n – left;
if (n < 2)
return;
internal_msort(a, left, helper_array);
internal_msort(a + left, right, helper_array);
merge(a, left, a + left, right, helper_array);
memcpy(a, helper_array, n * sizeof(int));
 }

int main()
{
int N;
printf("Enter number of points: ");
scanf("%d",&N);
printf("\n");
int points[N][2];
for(int i=0; i<N; i++)
{
    printf("Enter point: ");
    scanf("%d, %d",&points[i][1],&points[i][2]);
    printf("\n");
}

int squares_of_distances_array[N];

for(int j=0; j<N; j++)
{
  int squares_of_distances_array[j] = (points[j][1]*points[j][1]) + (points[j][1]*points[j][1]);   
}

merge_sort(squares_of_distances_array[], int N);
.
.
.
返回的数组如下所示

merge_sort(squares_of_distances_array[], squares_of_distances_indices[], int N);

然后使用排序后的索引数组打印坐标。

您可以创建如下结构

squares_of_distances_indices = {1,0,2}
和一个结构指针数组。然后分配和填充结构。然后根据其相应的dist属性对结构的指针进行排序。然后,您将根据其与原点的距离对点进行排序

struct points {
    int x, y, distance;
};
struct points*mypoints[size];

对于(i=0;i如何创建一个函数来记住已排序的数组索引?您可以使用C函数作为示例。您需要创建一个comparator函数。该链接提供了一个示例,还有更多联机示例。
struct points *mypoints[size];
for (i=0; i<size; i++) {
  mypoints[i] = malloc(sizeof (struct points));
  populate(mypoints[i]); // assign with x, y, dist
}
sort(mypoints);