2つの配列が同じ要素を持つかどうかを調べる関数を書く。私はこれを確認するための再帰的な関数を作成する必要があります。それのためのいくつかのアイデアはありますか?例えば ここアレイAB出力:2つの配列に同じ要素があるかどうかを調べる再帰的方法
A:[2 4 5 4]
B:[4 2 4]
アウトプットがあれば1であるべきである1
を出します同じであり、そうでなければ0である。
ここに私の定期的な機能:私はあなたがこのために探していると思う
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <assert.h>
int partition(int *a, int left, int right)
{
int first = left;
int pivot;
int pos;
srand((unsigned)time(NULL));
pos = rand() % (right - left + 1) + left;
swap(a + first, a + pos);
pivot = a[first];
while (left<right)
{
while (a[right] > pivot) right--;
while ((left < right) && (a[left] <= pivot)) left++;
if (left < right)
swap(a + left, a + right);
}
pos = right;
a[first] = a[pos];
a[pos] = pivot;
return pos;
}
void quick_sort(int *a, int first, int last)
{
int pos;
if (first<last)
{
pos = partition(a, first, last);
quick_sort(a, first, pos - 1);
quick_sort(a, pos + 1, last);
}
}
int *input_array_dyn(int n)
{
int i;
int *a;
a = (int *)calloc(n, sizeof(int));
assert(a);
printf("enter the array of length %d\n", n);
for (i = 0;i<n;i++)
scanf_s("%d", a + i);
return a;
}
int part1_excute(int *a, int *b, int n)
{
int index;
int ans = 1;
quick_sort(a, 0, n - 1);
quick_sort(b, 0, n - 1);
for (index = 0;index<n;index++)
{
if (a[index] != b[index])
ans = 0;
}
if (ans == 0) return 0;
else return 1;
free(a);
free(b);
}
void main()
{
int *a, *b;
int ans = 1;
int size;
printf("Please input the size of array\n");
scanf_s("%d", &size);
printf("First array:\n");
a = input_array_dyn(size);
printf("Second array:\n");
b = input_array_dyn(size);
printf("If the output is 1, the arrays are the same.\n");
printf("If the output is 0, the arrays are the not same.\n");
printf(" The ans is: %d\n", part1_excute(a,b,size));
}
再帰的な理由は? BTWクイックソートは既に再帰的です。 –
なぜソートを再実装するのですか?あなたが達成しようとしていることが単純な比較であるなら、 'qsort()'を使ってください。 – unwind
'無料(a); free(b); '決してこの点に達しない。 – BLUEPIXY