/* Escreva um programa que, dados um inteiro 0 <= n <= 1000, e uma sequência de n inteiros, imprime os números em ordem crescente. */ #include #define MAX 1000 void ordena (int v[MAX], int n); int main() { int n, i, v[MAX]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &v[i]); } ordena(v, n); for (i = 0; i < n; i++) { printf("%10d\n", v[i]); } return 0; } void ordena (int v[MAX], int n) { /* algoritmo de ordenação por inserção (insertion sort) */ int i, j; int chave; for (i = 1; i < n; i++) { /* v[0..i-1] já está ordenado */ chave = v[i]; /* chave é o elemento a ser "inserido" */ for (j = i-1; j >= 0 && v[j] > chave; j--) { v[j+1] = v[j]; /* desloca v[j] para direita */ } /* "for j" acaba ou com j == -1 e v[0..i-1] "originais" todos maiores que chave e deslocados para a direita */ /* ou acaba com j >= 0 e v[j] <= chave e v[j+1..i-1] "originais" todos maiores que chave e deslocados para a direita */ /* em ambos os casos, v[j+1] tem um "espaço a ser preenchido" */ v[j+1] = chave; } } /* versão do insertion sort com "trocas" */ /* void ordena (int v[MMAX], int n) { int i, j, t; for (i = 1; i < n; i++) { for (j = i-1; j >= 0 && v[j] > v[j+1]; j--) { t = v[j+1]; v[j+1] = v[j]; v[j] = t; } } } */