Lỗi tách mảng C++

Em đang làm bài tách các mảng số âm và số dương sao cho các số dương tăng dần và đứng bên trái còn các số âm thì đứng bên phải , ý tưởng của e là tách các số âm và dương ra 2 mảng khác nhau rồi Sort từng mảng sau đó lại gộp lại nhưng Code của e đang bị lỗi , anh chị nào kiểm tra lại hộ e được ko ạ

#include<iostream>

void input(int a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		std::cin >> a[i];
	}
}

void output(int a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		std::cout << a[i] << "  ";
	}
}

void Swab(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

void Sort(int a[], int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = n - 1; j > i; j--)
		{
			if (a[j] < a[j-1])
			{
				Swab(a[j], a[j - 1]);
			}
		}
	}
}

void TachMang(int a[], int b[], int c[], int n, int &p, int &q)
{
	p = 0;
	q = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] > 0)
		{
			b[p] = a[i];
			p++;
		}
		else
		{
			c[q] = a[i];
			q++;
		}
	}
}

void GopMang(int b[], int p, int c[] , int q, int temp[], int &n)
{
	n = p + q;
	for (int i = 0; i < n; i++)
	{
		if (i < n)
		{
			temp[i] = b[i];
		}
		else
		{
			temp[i] = c[i - p];
		}
	}
}
int main()
{
	int a[100];
	int n;
	std::cout << "Nhap so phan tu mang A: ";
	std::cin >> n;
	int b[100];
	int p = 0;
	int c[100];
	int q = 0;
	int temp[100];
	input(a, n);
	output(a, n);
	printf("\n");
	TachMang(a, b, c, n, p, q);
	n = p + q;
	Sort(b, p);
	Sort(c, q);
	GopMang(b, p, c, q, temp, n);
	output(temp, n);
	return 0;
}

Lỗi gì vậy bạn?

3 Likes

dạ, khi e tách mảng ra thì chỉ tách được các số dương ạ, còn số âm thì ko tách đc ạ

Sao không in thử mảng c xem tách có đúng chưa?
Tội cho “thằng” TachMang lắm.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?