基于另一个数组顺序的数组排序

时间:2016-02-10 17:14:15

标签: c arrays sorting

我是C的新手,我对此代码存在一些问题。

我需要将一个数组拆分成两个不同的数组,然后按照第一个数组的顺序对第二个数组进行排序。

有什么想法吗?

以下是我到目前为止的地方:

#include <stdio.h>
void main ()
{
    int currentN;
    int i, n;
    int array[20];
    printf("Enter the value of n\n");
    scanf("%d", &n);

    if (n%2 !=0)
    {
     printf("sequence would not be equ. please enter Odd \n");
     printf("Please Enter even number\n");
     scanf("%d", &n);
    }
    //add
    printf("enter the numbers\n");

    for (i = 0; i < n; ++i)
    {
     scanf("%d", &array[i]);
     //  scanf("%d", &currentN);
     // seq[i]= currentN;
    }
    n++;
    //add
    int *firstHalf = malloc(n/2 * sizeof(int));
    if (!firstHalf)
    {
     /* handle error */
    }

    int *secondHalf = malloc(n/2 * sizeof(int));
    if (!secondHalf)
    {
     /* handle error */
    }

    memcpy(firstHalf, array, n/2 * sizeof(int));
    memcpy(secondHalf, array + n/2, n/2 * sizeof(int));

    for (i = 0; i < n/2; i++)
    {
     printf( "%d\t", firstHalf[i]);
     //printf( "%d\n", secondHalf[i]);
     //printf( "\n************************");
    }
    printf("\n*********************\n");
    for (i = 0; i < n/2; i++)
    {
     printf( "%d\t", secondHalf[i]);
    }
}

2 个答案:

答案 0 :(得分:0)

获得所需内容的一种方法:

  1. 创建一个包含两个成员的angular.module('myApp', ['lumx']);
  2. 创建struct
  3. 的数组
  4. 填充struct数组,使原始数组的前半部分存储在struct数组元素的第一个成员中,原始数组的后半部分存储在第二个成员中struct数组的元素。
  5. 使用元素的第一个成员对struct数组进行排序。

答案 1 :(得分:0)

只需在上一个memcpy功能后添加此代码:

int j, temp;
for(i = 0; i < n/2; i++)
{
 for( j = 0; j < n/2 - 1; j++ )
 {
  if( firstHalf[j] > firstHalf[j+1] )
  {
   temp = firstHalf[j];
   firstHalf[j] = firstHalf[j+1];
   firstHalf[j+1] = temp;

   temp = secondHalf[j];
   secondHalf[j] = secondHalf[j+1];
   secondHalf[j+1] = temp;
  }
 }
}

我使用了基本的冒泡排序,但您可以使用任何高级排序算法。

技巧是,你在进行比较时只需要使用firstHalf数组,但在交换时,你可以交换两个数组中的元素。