01/10/2018, 00:19
Mọi người giúp em về ct đảo ngược mảng
code:
#include<iostream>
using namespace std;
int main() {
int size,N,temp;
int arr[]= { 2, 6, 5, 7, 9, 1, 3 };
size=sizeof(arr)/sizeof(int);
N=size-1;
for(int index=0; index<=N; index++) {
temp = arr[index];
arr[index] = arr[N-index];
arr[N-index] = temp;
}
for(int a=0; a<=N; a++) {
cout<<arr[a]<<" ";
}
return 0;
}
em không tìm được mình nhầm lẫn chỗ nào, khiến mảng không đảo
Bài liên quan
khi chạy từ 1 đến N/2, nó swap nửa trước với nửa sau
khi chạy từ N/2+1 đến N, nó swap nửa sau với nửa trước
mèo lại hoàn mèo :3
duyệt 1 nửa thôi b
Nếu bạn về học về Quicksort thì bạn sẽ dễ giải quyết được vấn đề này (Mặc dù không liên quan với nhau cho lắm ). Bạn cho 2 biến đại diện cho 2 index: 1 cái ở đầu mảng, 1 cái ở cuối mảng, rồi cho vòng lặp while với điều kiện
(index1 <= index2)
với mỗi lần lặp bạn swap 2 phần tử ở 2 index ấy rồi tăng 1 đơn vị cho index1, giảm 1 đơn vị cho index2.Nói dễ hiểu là bạn phải swap 2 phần tử mà có vị trí đối xứng với nhau
Đây là code mình viết bằng Java, bạn có thể tham khảo:
Giải pháp gì mà rắc rối vậy hen? Người ta chỉ cần cho vòng for chạy ngược thôi, chứ làm chi mà khai báo lower rồi upper nhìn vô phát DRY? Lúc chạy chép qua mảng trung gian khác nếu đề bài hông bắt buộc cấm dùng mảng trung gian, sau đó gán ngược trở lại là xong.
Em cũng nghĩ đến cách đó rồi ạ, mà tại sáng nay em mới học về Quick sort nên thử chút chơi ấy mà