Sắp xếp bằng thuật toán sắp xếp nhanh

CÁC BÁC XEM GIÚP EM ĐOẠN CODE SẮP XẾP DƯỚI ĐÂY EM BỊ SAI CHỖ NÀO VỚI Ạ. EM CHẠY MÀ KẾT QUẢ RA KHÔNG ĐƯỢC Ạ

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAX 99

void QuickSort(float a[MAX], int left, int right)
{
	int i = left, j = right;
	float x = a[(left+right)/2]; //luu gia tri phan tu giua mang
	do
	{
		while(a[i] < x)	//tim phan tu khong nho hon x theo i
			i++;
		while(a[j] > x)	//tim phan tu khong lon hon x theo j
			j--;
		if(i <= j)
		{
			//hoan doi 2 phan tu tai i va j
			{
				int tg = a[i];
				a[i]=a[j];
				a[j]=tg;
			}
			//tang i và giam j sau khi hoan doi
			i++;
			j--;
		}
	}
	while(i <= j);
	if(left<j) 	// neu left < j thi tiep tuc chia mang de sap xep
	QuickSort(a, left, j);
	if(i<right)	// neu right > i thi tiep tuc chia mang de sap xep
	QuickSort(a, i, right);
}

int main()
{
	float a[MAX];
	unsigned int n;
	int left = 1, right = n;
	printf("Nhap so phan tu cua day so: ");
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
	{
		printf("\tNhap vao so hang thu %d: ", i);
		scanf("%f", &a[i]);
	}
	printf("\n\n\tDay so vua nhap: ");
	{
		for (int i=1; i<=n; i++)
		printf("\t%f ", a[i]);
	}
	QuickSort(a, left, right);
	printf("\n\nDay so sau khi sap xep la: ");
	{
		for (int i=1; i<=n; i++)
		printf("\t%f ", a[i]);
		printf("\n\n");
	}
	return 0;
}

lỗi cụ thể ở chỗ nào và phải sửa như nào ạ?

Thuật toán đúng mà dấu ngoặc nhọn tùm lum :smiley:

2 Likes

Bạn thử debug đi rồi hẵng lên hỏi như vậy. Không biết debug sao thì search google là ra. Bảo đảm bạn debug từ từ sẽ ra lỗi.

1 Like

Ngồi buồn debug thử, thấy sai chỗ này.

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