mình nói sơ wa cho bạn hiểu nha.
Dùng vòng for thứ 1:
Đầu tiên mình cho mảng chạy trong vòng for( i=0; i<n; i++) như vậy chỉ cần gặp lẻ thì cứ đưa lên đầu (tức là cho số lẻ vừa tìm thấy nằm ngay vi trí a[0], dùng hàm lùi mảng nhé), thì cứ cho chạy hết vòng for thì giá trị lẻ đã bị đẩy lên trên và còn lại sẽ là chẵn thôi.
Dùng vòng for thứ 2:
Lưu ý: lúc này mảng đã sắp lẻ trc chẵn sau
trong for bạn cho 2 điều kiện:
if là lẻ thì tiến hành sắp xếp lại tăng dần
if là chẵn thì Giảm dần
http://it9x.co.cc
Code:
void duachanvedau(int a[], int k)
{
int tam = a[k];
for(int i = k ; i>0; i--)
{
a[i] = a[i-1];
}
a[0] = tam;
}
void sapxep(int a[], int n)
{
int i,j,tam;
int vitrichancuoi;
for (i=0; i<n; i++)
{
if (a[i] %2 == 0)
{
duachanvedau(a,i); //vi tri i
}
}
for (i=0;i<n;i++)
{
for (j=i+1; j<n;j++)
{
if (a[i]%2==0 && a[j]%2==0 && a[i]>a[j])
{
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
else if (a[i]%2!=0 && a[j] %2 !=0 && a[i]<a[j])
{
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
}
}
}
lưu ý:
Điều kiện thứ 2: ko để else ko, nếu để else ko chỉ if lần đầu sai 1 điều kiện bên trong là else sẽ thực hiện (nhớ là mảng sắp theo lẻ chẵn nên sẽ có lúc lẻ và chẵn giao nhau, else if (... ) là để loại bỏ trường hợp đó)
http://it9x.co.cc -Freb