void recursiveBubble(int *p, int n, int i = 0)
{
if (n == 0)
return;
if (i == n - 1)
{
recursiveBubble(p, n--, i = 0);
}
if (p[i] > p[i + 1])
{
Swap(p[i], p[i + 1]);
recursiveBubble(p, n, i = i + 1);
}
recursiveBubble(p, n, i = i + 1);
}
int main(void)
{
int p;
int array[N] = { 37, 23, 17, 12, 72, 31, 46 };
recursiveBubble(array, N);
printf("The list of sorted numbers is\n");
for (p = 0; p < N; p++)
printf("%d ", array[p]);
printf("\n\n");
return 0;
}
chỗ i==n-1 phải thêm 1 cái return nữa. Nếu i==n-1 rồi thì đâu cần ktra p[i] với p[i+1] nữa. Với lại phải là --n hay n-1 chứ ko phải n–. Bỏ hết mấy cái i= luôn đi. Ta viết vậy trong mã giả kia cho dễ thấy chứ viết code cần gì @_@
if (i == n - 1)
{
recursiveBubble(p, n-1, 0);
return;
}
Dùng insert sort+đệ quy
How to sort without using loop
Ý tưởng chế lại 2 vòng for hay dùng :))
Dùng từ khóa goto.
ko cần goto cũng làm được mà.
ý tưởng là xài bubble sort, viết thêm 1 hàm hỗ trợ, tạm gọi là
recursiveBubble(float* a, int n, int i)
. Giá trị ban đầu của i là 0.ví dụ mảng a = 3 2 1 4, gọi
recursiveBubble(a, n=4, i=0)
recursiveBubble(a, n, i=i+1)
recursiveBubble(a, n, i=i+1)
recursiveBubble(a, n, i=i+1)
recursiveBubble(a, n=n-1, i=0)
v.v…
tới khi n = 0 thì dừng.
viết lại thành insertion sort cũng dễ. Thay vì i=0, n=4 thì i=1,n=1, rồi i=i-1 và n=n+1. Có lẽ phải thêm 1 biến maxN nữa để biết lúc mà dừng ++n
Mọi người giúp em xem code này với ạ, sao em chạy mà vẫn không ra
Bạn @tntxtnt xem dùng mình với, sao mình làm giống bạn mà chưa ra được bạn ơi
chỗ i==n-1 phải thêm 1 cái return nữa. Nếu i==n-1 rồi thì đâu cần ktra p[i] với p[i+1] nữa. Với lại phải là --n hay n-1 chứ ko phải n–. Bỏ hết mấy cái i= luôn đi. Ta viết vậy trong mã giả kia cho dễ thấy chứ viết code cần gì @_@
Mình khoái goto.
Mà nói thật mấy cái bài kiểu này lãng xẹt vl. Thà bắt người ta khai triển cách nào tối ưu nhất thì không làm lại đi làm theo kiểu “đụt tư duy”.
goto nếu chuyển thành mã máy thì coi như là vòng lặp rồi
Mình cảm ơn nhiều nha, mình làm ra được rồi