Merge sort chạy không ra kết quả

Em đang làm bài tập sắp xếp danh sách số thực bằng sắp xếp trộn. Em có code như sau :

#include<iostream>
using namespace std;
struct sothuc
{
	float r;	
};
void sx(sothuc a[],int l,int r)
{
	sothuc b[r+1];
	if(r>0)
	{
		int m=(r+l)/2;
		sx(a,l,m);sx(a,m+1,r);
		for(int i=m;i>=l;i--) b[i]=a[i];//chep nua dau a sang b
		for(int j=m+1;j<=r;j++) b[r+m+1-j]=a[j];//chep nua con lai theo thu tu nguoc lai
		int i=l,j=r;//i chay tu dau mang b, j chay tu cuoi mang b va tron 
		for(int k=0;k<r;k++)
		{
			if(b[i].r<=b[j].r)
			{
				a[k]=b[i];i++;
			}
			else
			{
				a[k]=b[j];j--;
			}
		}
	}
}
void xuat(sothuc a[],int n)
{
	for(int i=0;i<n;i++)
	{
		cout<<a[i].r<<" ";
	}
}
int main()
{
	sothuc a[5]=
	{
		{-2},{0},{1},{5},{-6}
	};
	sx(a,0,4);
	xuat(a,5);
}

Khi chạy thì không hiện kết quả nên em nhờ mọi người sửa giúp code của em với ạ.Em cảm ơn mọi người.

  1. Bạn dùng chỉ số k chạy từ 0 đến r là hỏng hết mảng. Điểm này thì đặt thêm một con trỏ cho dãy con bên phải sẽ đỡ phức tạp hơn.
  2. Bạn phải kiểm tra dãy con nào hết phần tử, sau đó thêm dãy con còn lại vào.
  3. Nguy cơ stack overflow vì cấp phát mảng tĩnh liên tục.
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?