Muốn sắp nó tăng dần nữa thì có cách là sắp tăng những số lẻ, xong rồi sắp tăng những số chẵn. Như vậy thì mình cần biết là tới vị trí nào thì kết thúc các số lẻ và qua số chẵn. Có thể làm như sau:
Code:
for(k = 0; a[k] % 2 != 0; k++);
/* Lam xong dong tren thi k la vi tri
phan tu chan dau tien trong mang */
Sau đó mình viết một hàm sắp tăng như sau
Code:
void saptang(int a[], int d, int c)
{
int i, j, t;
for(i = d; i < c - 1; i++) {
for(j = i + 1; j < c; j++)
if(a[j] < a[i]) {
t = a[i]; a[i] = a[j]; a[j] = t;
}
}
}
Hàm saptang này dùng để sắp tăng 1 phần mảng từ vị trí d đến c - 1.
Vậy là xong bây giờ chỉ việc gọi các hàm để nó sắp tăng dần theo như sau:
Code:
donchle(a, N); // don le len dau, chan xuong duoi
for(k = 0; a[k] % 2 != 0; k++); // lay vtri k la vtri ket thuc so le va qua so chan
saptang(a, 0, k); // sap tang so le
saptang(a, k, N); // sap tang so chan
Cách này thì đơn giản, dễ hiểu, nhưng mà hơi bị dài. Không biết còn cách nào hay hơn không.