Thuật Toán Sắp Xếp Các Số Thành Dãy : Chẵn Lẻ Chẵn Lẻ - Dạy Nhau Học Trang chủ » Nhập Mảng A Gồm N Phần Tử Sao Cho Các Số Chẳn Và Lẻ Xen Kẽ Nhau » Thuật Toán Sắp Xếp Các Số Thành Dãy : Chẵn Lẻ Chẵn Lẻ - Dạy Nhau Học Có thể bạn quan tâm Nhập Mảng A Gồm N Phần Tử Sao Cho Mọi Phần Tử Lặp Lại Không Quá 2 Lần Nhập Mảng A Gồm N Phần Tử Số Nguyên Sao Cho Các Số Dương Có Thứ Tự Tăng Nhập Mảng A Gồm N Phần Tử Tính Tổng Các Phần Tử Trong Mảng Nhập Mảng A Gồm N Phần Tử Tính Tổng Các Số âm Trong Mảng Nhập Mảng Cấu Trúc Trong C++ Thuật toán sắp xếp các số thành dãy : chẵn lẻ chẵn lẻ programming c algorithm c++ developer11296 (Minh Xù) February 18, 2015, 5:22pm #1 Tình hình là chiều nay e thi rồi mà cả lớp e suy nghĩ hoài ko ra đành nhờ các bác chỉ giáo ạ ! E đã làm và ko thành công TTmagic (TTmagic) December 10, 2014, 4:07am #2 tức là 1 số chẵn 1 số lẻ xen kẽ nhau mà ko quan trọng sắp xếp tăng giảm á ? 1 Like ltd (Lê Trần Đạt) December 10, 2014, 4:25am #3 Em thử search với từ khóa “chẵn lẻ” bằng công cụ tìm kiếm của diễn đàn xem. Có một số bài tương tự. Em xem trước đi, xem có phải đúng cái em đang hỏi không? 1 Like developer11296 (Minh Xù) December 10, 2014, 4:26am #4 Dạ để e xem . Không phải a Đạt ơi @TTmagic đúng rồi bạn 1 Like Honey_moon (Thực tế khắc nghiệt) December 10, 2014, 4:55am #5 hóng luôn xem thê nào. nói về thuật toán thì mù màu 1 Like minh_vu_03 December 10, 2014, 6:27am #6 Nhìn có vẻ dài nhưng nó không thực hiện được bao nhiêu bước đâu #include <iostream> using namespace std; void swap(int* a,int* b) { int temp = *a; *a = *b; *b = temp; } void merge(int* a,int left,int align,int right) { int temp1[align-left+1]; int temp2[right-align]; int index = left; for(int i = 0; i < align-left+1; i++) temp1[i] = a[index++]; for(int i = 0; i < right-align; i++) temp2[i] = a[index++]; index = 0; for(int i = 0; i < align-left+1; i++,index+=2) a[index] = temp1[i]; index = 1; for(int i = 0; i < right-align; i++,index+=2) a[index] = temp2[i]; } //Move element is even to left, element is odd to right void move(int* a,int left,int right) { int l = left,r = right; while(l < r) { while(!(a[l] & 1) && l < right) l++; while(a[r]&1 && r > left) r--; if(l < r) swap(&a[l],&a[r]); } int align = l+1; merge(a,left,align,right); } int main() { int a[] = { 1,6,4,3,7,7,9,5 }; int n = sizeof(a)/sizeof(a[0]); move(a,0,n-1); for(int i = 0; i < n; i++) cout << a[i] << " "; return 0; } Bạn thích thì tách trực tiếp ra 2 mảng rồi trộn nó lại cho ngắn gọn cũng được. Nếu bạn cần đảm bảo thứ tự cho các phần tử chẵn và các phần tử lẻ thì sắp xếp cho 2 cái mảng phụ temp1 và temp2 là được Nếu không cho phép dùng mảng phụ thì phải dùng đệ quy làm trực tiếp. Cái này bó tay! 4 Likes qtd (Đỗ Trung Quân) December 10, 2014, 7:20am #7 Thuật toán thì mình có thể chỉ cho bạn Ví dụ bạn có 1 mảng []a = { 1 3 6 4 5 6 7} Khai báo thêm 1 mảng [7]b để lưu giá trị sau khi tìm thấy. Chạy 1 vòng for của mảng a để tìm kiếm giá trị lưu vào mảng []b; Bạn lưu theo biến i của vòng for. Cho i chạy từ 1; i++. 1 2 3 4. Lẻ, chẵn, lẻ chẵn … Có nghĩa là lợi dụng tính liên tục chẵn lẻ của vòng for để giải quyết bài toán 1 Like Honey_moon (Thực tế khắc nghiệt) December 10, 2014, 7:33am #8 Is2IT: Có nghĩa là lợi dụng tính liên tục chẵn lẻ của vòng for để giải quyết bài toán đã hiểu nhưng thắc mắc là so sánh thế nào để được giá trị chẵn lẻ trong khi mảng nhập là 1 con số vô cùng lớn qtd (Đỗ Trung Quân) December 10, 2014, 7:50am #9 Honey_moon: đã hiểu nhưng thắc mắc là so sánh thế nào để được giá trị chẵn lẻ Thực ra thì mình cũng chưa có code xem đúng hay sai. Đây chỉ là suy nghĩ khi đọc xong đề bài thôi. Thường thường làm những bài như này người ta tách mảng ban đần làm 2 mảng. 1 mảng lưu toàn số chẵn và 1 mảng lưu số lẻ. Sau đó đưa lần lượt 2 mảng chẵn lẻ này vào 1 mảng mới theo cách. Cho tất cả các giá trị chẵn vào mảng mới tại các vị trí i chẵn , mảng lẻ cho vào vị trí i lẻ. 1 Like Honey_moon (Thực tế khắc nghiệt) December 10, 2014, 7:50am #10 nói cách này thì xong lâu rồi. chứ thuật toán là chịu 2 Likes developer11296 (Minh Xù) December 10, 2014, 10:33am #11 E thì thi vẽ sơ đồ pascal mà qtd (Đỗ Trung Quân) December 10, 2014, 10:55am #12 Bó tay. huhuhu T____T htwap (lu___va_sa__) December 10, 2014, 11:26am #13 developer11296: E thì thi vẽ sơ đồ pascal mà vẽ thì bạn làm như a kia đi, đưa các số chẵn vào 1 mảng a, số lẻ vào 1 mảng b, rồi gộp lại thành mảng c có các phần tử mang chỉ số chẵn là mảng a, chỉ số lẻ là mảng b. 2 Likes yuh (Huy) December 11, 2014, 8:02am #14 ý tưởng của mình cũng như bn @@ Lọc chẵn lẻ ra 2 mảng Chan[], le[]: Duyệt mảng mới newArr[] - Nếu i % 2 == 0 thì newArr[] = chan[] else newArr[] = le[]; Xuất newArr[] 1 Like Htc (Hồ Thế Chín) December 11, 2014, 8:08am #15 tìm tất cả các số chẵn ,lưu vào những vị trí chẵn của dãy,dùng biến i=i+2,xong là số lẻ thì nhét vào vị trí lẻ … có lẽ thế 1 Like developer11296 (Minh Xù) December 11, 2014, 10:40am #16 Ý e là chẵn lẻ xen kẽ kìa minh_vu_03 December 11, 2014, 10:43am #17 Htc: tìm tất cả các số chẵn ,lưu vào những vị trí chẵn của dãy,dùng biến i=i+2,xong là số lẻ thì nhét vào vị trí lẻ … có lẽ thế Nếu các số chẵn lưu vào vị trí chẵn của dãy thì những số lẻ nằm trên những vị trí chẵn có thể bị đè lên làm mất mát dữ liệu. Không nên làm trực tiếp như thế. yuh (Huy) December 11, 2014, 11:05am #18 nhét lẻ vào rồi mất cả chẵn ah :v 1 Like Htc (Hồ Thế Chín) December 11, 2014, 12:57pm #19 ý t là tạo 1 mảng kết quả mà,cứ xét mảng gốc,số nào là số chẵn thì đưa vào vị trí chẵn của mảng kq,xong đưa lẻ vào vị trí còn lại,lúc đầu nên khởi tạo tất cả các số của mảng kq là -1 chẳng hạn,xong chạy 1 vòng nữa,nếu chỗ nào -1 thì lùi cái phần tử tiếp theo đi(trường hợp số chẵn số lẻ không bằng nhau)…mình nghĩ thế?sai chỗ nào các bạn chỉ với,hoang mang style rồi 1 Like rogp10 (rogp10) September 11, 2017, 6:29am #20 Dùng O(1) mem thì có thể nghĩ theo hướng chia đôi mảng theo quicksort xong tìm cách swap cho xen kẽ 1 Like DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Nhập Mảng A Gồm N Phần Tử Sao Cho Các Số Chẳn Và Lẻ Xen Kẽ Nhau [Bài Tập C++] Sắp Xếp Chẵn Lẻ Xen Kẽ Nhau - YouTube [] - Kiểm Tra Mảng Xen Kẽ Chẵn Lẻ - Vòng Lặp - YouTube C++: Sắp Xếp Mảng Số Chẵn Trước Lẻ Sau - VN SEEDER Sắp Xếp Chẵn Lẻ Xen Kẽ Tăng Dần - Cộng đồng C Việt Java - Nhập Mảng Và Thực Hiện Tách Các Số Chẵn Và Lẻ Trong Mảng ... Tách Số Chẵn Và Số Lẻ - TutorialCup Bài Tập Mảng 1 Chiều Trong C/C++ Có đáp án - Lập Trình Không Khó Viết Chương Trình đếm Các Số La Bội Của 3 Trong Dãy Số Nguyên A Có ... Sắp Xếp Mảng Sao Cho Các Số Lẻ Nằm Trước Day, Các Số Chẵn Nằm ở ... Truy Xuất Phần Tử Của Mảng - Giáo Trình Bài Tập Kỹ Thuật Lập Trình Bai Tap Nhap Mon Lap Trinh_Thay Hoang.pdf - Quách Đình Hoàng ... [PDF] Kỹ Thuật Lập Trình,đặng Bình Phương,dhkhtnhcm