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.
Bài liên quan
để đả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
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Đã hiểu. Thanks a…