Nhập mảng 1 chiều N phần tử. Chia làm 2 nửa: nửa đầu (0 đến N/2-1) sắp tăng dần, nửa sau (N/2 đến N-1) sắp giảm dần.
Giải thuật
- b = n/2
- Sắp nửa đầu tăng: i=0..b-1, j=i+1..b-1, hoán đổi nếu a[i] > a[j]
- Sắp nửa sau giảm: i=b..n-1, j=i+1..n-1, hoán đổi nếu a[i] < a[j]
- In 2 nửa riêng biệt
Chương trình
#include <stdio.h>
void main() {
int i, j, a, n, b, number[30];
printf("N: "); scanf("%d", &n); b = n/2;
printf("Numbers: "); for(i=0;i<n;i++) scanf("%d",&number[i]);
// Sort first half ascending
for(i=0;i<b;i++) for(j=i+1;j<b;j++) if(number[i]>number[j]) { a=number[i]; number[i]=number[j]; number[j]=a; }
// Sort second half descending
for(i=b;i<n;i++) for(j=i+1;j<n;j++) if(number[i]
Kết quả
N=10: 20 34 23 11 45 56 78 98 76 54
1st half asc: 11 20 23 34 45
2nd half desc: 98 78 76 56 54