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

if không đấy bạn.

1 Like

dung bao nhiu if kung dk]

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ả

1 Like

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

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

1 Like

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

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ì

1 Like

e dang hoc bên ngon ngu java a

À nhầm nhầm :smiley:
Có lẽ làm kiểu fake này vậy :wink:
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 =))

1 Like

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

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 :smiley:

1 Like

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

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

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ẻ

1 Like

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

3 Likes

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

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

1 Like

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

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–;
}

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?