Một người bạn của tôi gửi mã này với tôi, nói rằng nó không hoạt động như mong đợi:đầu ra không mong đợi từ chương trình sắp xếp nổi bọt với MSVC vs TCC
#include<stdio.h>
void main()
{
int a [10] ={23, 100, 20, 30, 25, 45, 40, 55, 43, 42};
int sizeOfInput = sizeof(a)/sizeof(int);
int b, outer, inner, c;
printf("Size is : %d \n", sizeOfInput);
printf("Values before bubble sort are : \n");
for (b = 0; b < sizeOfInput; b++)
printf("%d\n", a[b]);
printf("End of values before bubble sort... \n");
for (outer = sizeOfInput; outer > 0; outer--)
{
for ( inner = 0 ; inner < outer ; inner++)
{
printf ("Comparing positions: %d and %d\n",inner,inner+1);
if (a[inner] > a[inner + 1])
{
int tmp = a[inner];
a[inner] = a [inner+1];
a[inner+1] = tmp;
}
}
printf ("Bubble sort total array size after inner loop is %d :\n",sizeOfInput);
printf ("Bubble sort sizeOfInput after inner loop is %d :\n",sizeOfInput);
}
printf ("Bubble sort total array size at the end is %d :\n",sizeOfInput);
for (c = 0 ; c < sizeOfInput; c++)
printf("Element: %d\n", a[c]);
}
Tôi đang sử dụng Micosoft Visual Studio lệnh Công cụ Line để biên dịch nó trên máy Windows XP. cl /EHsc bubblesort01.c
Bạn tôi nhận được kết quả chính xác trên máy khủng long (mã được biên soạn bằng TCC tại đó).
Sản lượng của tôi không mong muốn. Các mảng bí ẩn phát triển về kích thước, ở giữa.
Nếu bạn thay đổi mã để biến sizeOfInput
được đổi thành sizeOfInputt
, nó sẽ cho kết quả mong đợi!
Tìm kiếm được thực hiện tại Microsoft Visual C++ Developer Center không cung cấp bất kỳ kết quả nào cho "sizeOfInput".
Tôi không phải là chuyên gia C/C++, và tò mò muốn tìm hiểu lý do tại sao điều này xảy ra - bất kỳ chuyên gia C/C++ nào có thể "làm sáng tỏ" về điều này?
Lưu ý không liên quan: Tôi đã nghiêm túc nghĩ đến việc viết lại toàn bộ mã để sử dụng quicksort hoặc sắp xếp hợp nhất trước khi đăng nó ở đây. Nhưng, sau khi tất cả, nó không phải là Stooge sắp xếp ...
Chỉnh sửa: Tôi biết mã không đúng (nó đọc ngoài phần tử cuối), nhưng tôi tò mò tại sao tên biến tạo nên sự khác biệt.
Cảm ơn bạn đã chỉnh sửa nhưng chỉ nhận thấy rằng nó đã làm sai các thẻ > và < (>. <). – crnlx