01/10/2018, 08:24

Sắp xếp chẵn lẻ chỉ dùng 1 vòng for

e có bai tap la sap xep chẵn trước lẻ sau nhưng chỉ dung 1 lệnh for…pro nao giúp e với

rogp10 viết 10:39 ngày 01/10/2018

if không đấy bạn.

Khánh Phạm viết 10:26 ngày 01/10/2018

dung bao nhiu if kung dk]

Trần Hoàn viết 10:36 ngày 01/10/2018

Thuật toán đơn giản nhất nhé:
Giả sử Input là mảng số đầu vào
Tạo mảng Chan có kích thước bằng Input, và mảng Le cũng bằng mảng Chan, và 2 biến m,n =0 thể hiện số phần tử thực sự đã có trong 2 mảng
Chạy vòng for từ đầu đến cuối Input, chẵn cho vào Chan, lẻ cho vào Le
Cho các phần tử từ 0 đến m-1 ở mảng Le vào các phần tử từ n đến n+m-1 ở mảng Chan, và hiện mảng Chan làm kết quả

Khánh Phạm viết 10:37 ngày 01/10/2018

a có thể cho e xem abn code dk ko

rogp10 viết 10:25 ngày 01/10/2018

Người ta bảo 1 for mà cái này chắc 2 rồi

Khánh Phạm viết 10:39 ngày 01/10/2018

2thi e lam ra roi…cô kêu la nhiều if sẽ dk

Đào An viết 10:38 ngày 01/10/2018
input = [1, 2, 5, 6, 34, 665, 234, 56, 35, 57, 2]
even, odd = [], []

for num in input:
    if num % 2 == 0:
        even.append(num)
    else:
        odd.append(num)

print (even + odd)

Output: [2, 6, 34, 234, 56, 2, 1, 5, 665, 35, 57]
M code bằng python nhé , ko biết bạn hỏi định làm = ngôn ngữ gì

Khánh Phạm viết 10:25 ngày 01/10/2018

e dang hoc bên ngon ngu java a

Trần Hoàn viết 10:27 ngày 01/10/2018

À nhầm nhầm
Có lẽ làm kiểu fake này vậy
Dùng 1 string Output="", chạy vòng for từ đầu đến cuối Input, nếu là chẵn thì Output = Input[i] + " " + Output, lẻ thì Output += " " + Input[i] rồi show Output ra =))

Khánh Phạm viết 10:29 ngày 01/10/2018

a co the cho e cai ban code ko…e còn yếu lắm

Trần Hoàn viết 10:25 ngày 01/10/2018

Hì hì, lúc đó mình định dùng list nhưng mà mình tưởng bạn làm C không có list nên mình nói v thôi. Mình làm C# thì ghép 2 List không cần for, nhưng có lẽ method ghép List có sẵn thì cũng bao gồm for

Khánh Phạm viết 10:36 ngày 01/10/2018

ngồi miết mak ko nghi ra dk cái thuật toán…đành nhờ maasy pro

Trần Hoàn viết 10:31 ngày 01/10/2018

Mình chỉ biết C#, bạn xem tạm =))

Văn Anh viết 10:37 ngày 01/10/2018

Theo mình thì bạn chạy vòng lặp,cho điều kiện if chia hết cho 2 thì add số i vào mảng chẵn,không chia hết cho 2 thì add i vào mảng lẻ.Sau đó in mảng chẳn trước rồi đến mảng lẻ

viết 10:29 ngày 01/10/2018

khỏi cần mảng phụ cũng được, gặp chẵn thì swap nó lên đầu, gặp lẻ thì swap nó ra sau đít.

5 4 3 2 1 6 8 7 9
^               ^
i               j
a[i] = 5 lẻ, cho nó ra sau đít, lùi j, i giữ nguyên

9 4 3 2 1 6 8 7 5
^             ^
i             j
a[i] = 9 lẻ, cho nó ra sau đít, lùi j, i giữ nguyên

7 4 3 2 1 6 8 9 5
^           ^
i           j
a[i] = 7 lẻ, cho nó ra sau đít, lùi j, i giữ nguyên

8 4 3 2 1 6 7 9 5
^         ^
i         j
a[i] = 8 chẵn, tăng i

8 4 3 2 1 6 7 9 5
  ^       ^
  i       j
a[i] = 4 chẵn, tăng i

8 4 3 2 1 6 7 9 5
    ^     ^
    i     j
a[i] = 3 lẻ, cho nó ra sau đít, lùi j, i giữ nguyên

8 4 6 2 1 3 7 9 5
    ^   ^
    i   j
a[i] = 6 chẵn, tăng i

8 4 6 2 1 3 7 9 5
      ^ ^
      i j
a[i] = 2 chẵn, tăng i

8 4 6 2 1 3 7 9 5
        ^
        i,j
i == j, kết thúc

rogp10 viết 10:26 ngày 01/10/2018

Phân hoạch của QuickSort đây mà

Ngoài ra có cả phân hoạch 3 phần.

viết 10:39 ngày 01/10/2018

đúng rồi, cần gì mảng phụ

Khánh Phạm viết 10:27 ngày 01/10/2018

for(int i=0;i<n-1;i++){
if(a[i]%2!=0){
tam=a[i];
a[i]=a[j];
a[j]=tam;
j–;
i–;
}

Khánh Phạm viết 10:25 ngày 01/10/2018

nó bị sai j ạ…mak nó ko ra…

Khánh Phạm viết 10:25 ngày 01/10/2018

có lúc phai giữ i…minh lam nhu trên á

Bài liên quan
0