30/09/2018, 19:58

Sort bằng đệ quy: Mình không hiểu tại sao phải cần gọi lại hàm sort trong cái điều kiện if?

void sort(int a[], int n)
{
	if (n == 1)return;
	else{
		sort(a, n - 1); 
		if (a[n - 1] < a[n - 2])
		{ 
			int temp = a[n - 1]; 
			a[n - 1] = a[n - 2];
			a[n - 2] = temp;
		**_**sort(a, n - 1);**_** 
		}
	}

}

sắp xếp n-1 phần tử xét phần tử cuối cùng nếu phần tử đứng trước nó thì hoán vị rồi sắp xếp lại n-1 phần tử trước đó.
Mình không hiểu tại sao phải cần gọi lại hàm sort trong cái điều kiện if.

Ai Android viết 22:04 ngày 30/09/2018

để đảm bảo dồn được số bé nhất về phía trước.
Ví dụ: dãy 3 2 1
dãy theo thứ tự sẽ là:
2 3 1
2 1 3
1 2 3
nếu không có sort thì sẽ dừng lại khi dãy là : 2 1 3

Gió viết 22:13 ngày 30/09/2018

Code này bản chất là insert sort thôi. Nó sẽ sort từ đầu n=1 tới cuối. Nếu tại 1 đoạn nào đó có 1 phần tử thêm vào đoạn đã sort nhỏ hơn cuối if(a[n-1]<a[n-2])thì cần phải chèn vào và sort lại đoạn đó. Do đó mới có lệnh if ở và hàm sort trong if

David Teo viết 22:04 ngày 30/09/2018

Đã hiểu. Thanks a…

Bài liên quan
0