Skip to content

Instantly share code, notes, and snippets.

@dtinth
Created October 17, 2010 14:17
Show Gist options
  • Save dtinth/630891 to your computer and use it in GitHub Desktop.
Save dtinth/630891 to your computer and use it in GitHub Desktop.
Task: Sort the input _without_ using any kind of loops. No do, while, for allowed.
/*
LANG: C
TASK: oct14_sort
*/
#include <stdio.h>
#include <stdlib.h>
int canwn;
int ladab_khxng_canwn[1000];
void rabkha(int cak, int thung) {
if (cak >= thung) return;
scanf ("%d", &ladab_khxng_canwn[cak]);
rabkha (cak + 1, thung);
}
void khadlxk_khxmul(int *cak, int *thung, int khnad) {
if (khnad == 0) return;
*thung = *cak;
khadlxk_khxmul (cak + 1, thung + 1, khnad - 1);
}
int *srang_sanea_khxng_ladab(int ladab[], int khnad) {
int *sanea = malloc(sizeof(int) * khnad);
khadlxk_khxmul (ladab, sanea, khnad);
return sanea;
}
void phsan(int *khrung_raek, int khnad_khxng_khrung_raek, int *khrung_hlang, int khnad_khxng_khrung_hlang, int *playthang) {
if (khnad_khxng_khrung_raek > 0 && khnad_khxng_khrung_hlang > 0) {
if (*khrung_raek < *khrung_hlang) {
*playthang = *khrung_raek;
phsan (khrung_raek + 1, khnad_khxng_khrung_raek - 1, khrung_hlang, khnad_khxng_khrung_hlang, playthang + 1);
} else {
*playthang = *khrung_hlang;
phsan (khrung_raek, khnad_khxng_khrung_raek, khrung_hlang + 1, khnad_khxng_khrung_hlang - 1, playthang + 1);
}
} else if (khnad_khxng_khrung_raek > 0) {
*playthang = *khrung_raek;
phsan (khrung_raek + 1, khnad_khxng_khrung_raek - 1, khrung_hlang, khnad_khxng_khrung_hlang, playthang + 1);
} else if (khnad_khxng_khrung_hlang > 0) {
*playthang = *khrung_hlang;
phsan (khrung_raek, khnad_khxng_khrung_raek, khrung_hlang + 1, khnad_khxng_khrung_hlang - 1, playthang + 1);
}
}
void rieyng_ladam_khxmul_baeb_phsan(int ladab[], int khnad) {
if (khnad <= 1) return;
int trng_klang = khnad / 2;
rieyng_ladam_khxmul_baeb_phsan (ladab, trng_klang);
rieyng_ladam_khxmul_baeb_phsan (ladab + trng_klang, khnad - trng_klang);
int *khrung_raek = srang_sanea_khxng_ladab(ladab, trng_klang);
int *khrung_hlang = srang_sanea_khxng_ladab(ladab + trng_klang, khnad - trng_klang);
phsan (khrung_raek, trng_klang, khrung_hlang, khnad - trng_klang, ladab);
free (khrung_raek);
free (khrung_hlang);
}
void saedng_phl(int *ladab, int khnad) {
if (khnad == 0) return;
printf ("%d\n", *ladab);
saedng_phl (ladab + 1, khnad - 1);
}
int main() {
scanf ("%d", &canwn);
rabkha (0, canwn);
rieyng_ladam_khxmul_baeb_phsan (ladab_khxng_canwn, canwn);
saedng_phl (ladab_khxng_canwn, canwn);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment