Bài tập tổng hợp Kỹ thuật lập trình C/C++ (Đề số 2)

Monday, April 09, 2018
Edit this post


Viết chương trình nhập vào một mảng các số nguyên ngẫu nhiên (số lượng phần tử tùy ý). Sắp xếp mảng sao cho các số lẻ nằm tăng dần ở bên trái mảng, các số chẵn nằm tăng dần ở bên phải mảng. Không được sử dụng mảng trung gian.

Giải thuật của chúng ta ở đây là sẽ đưa hết các số lẻ về bên trái, các số chẵn về bên phải, ghi nhớ vị trí của biên các phần chẵn lẻ bằng 2 biến index là l (left) và r (right). Trong đó l đi từ trái qua và r đi từ phải qua. Cuối cùng, chỉ cần sắp xếp 2 phần lẻ và chẵn bằng một giải thuật tìm kiếm bất kỳ là xong. Ở đây tôi dùng Bubble Sort.

Đây là phần code chính của chúng ta:

...
        int l = 0; // index ben trai
 int r = n - 1; // index ben phai
 
 cout << "\n\nPhan tach so chan va so le:";
 // tach phan tu le va chan
 while (l < r) {
  // tim so le dau tien tu ben phai
  while (laSoChan(a[r])) {
   r--; // r = r - 1, r giam di 1 don vi
  }
  // tim so chan dau tien tu ben trai
  while (!laSoChan(a[l])) {
   l++; // l = l + 1
  }
  // in ra cac index
  cout << "\nl=" << l << ",r=" << r << endl;
  // hoan doi gia tri cua so chan va so le
  hoandoi(a[l], a[r]);
   // in ra cac phan tu trong mang
  inMang(a);
 }
 hoandoi(a[l], a[r]);
  cout << "\nl=" << l << ",r=" << r << endl;
 inMang(a);
 
 cout << "\n\nSap xep phan so le: \n";
 for (int i = 0; i < l; i++) {
  for (int j = i + 1; j < l; j++) {
   if (a[j] < a[i]) {
    hoandoi(a[i], a[j]);
   }
  }
 }
 inMang(a);
 
 cout << "\n\nSap xep phan so chan: \n";
 for (int i = r + 1; i < n; i++) {
  for (int j = i + 1; j < n; j++) {
   if (a[j] < a[i]) {
    hoandoi(a[i], a[j]);
   }
  }
 }
 inMang(a);
...


Demo và mã nguồn của chương trình vui lòng tải về theo link bên dưới. Như các bạn thấy, trong hình tôi in ra mảng trước khi sắp xếp với số lẻ màu đỏ và số chẵn màu xanh, in ra mảng sau từng bước hoán đổi kèm 2 chỉ số l và r. Ở các bước gần cuối, các bạn có thể thấy các số lẻ được dồn về bên trái và số chẵn về bên phải. Cuối cùng, công việc của chúng ta trở nên rất nhẹ nhàng để sort phần số lẻ và phần số chẵn.



.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...