All pastes #1394548 Raw Edit

Someone

public c v1 · immutable
#1394548 ·published 2009-04-17 01:33 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <math.h>struct compare_state {  long long n_compares;  double reliability;};int compare(int a, int b, struct compare_state *state){  int ret;  state->n_compares++;  ret = b < a;  if(drand48() >= state->reliability) {    ret = !ret;  }  return ret;}int sorted(int *ar, int len){  int badness = 0;  int len_save = len;  while(--len) {    if(*ar > *++ar)      badness++;  }  return badness <= log(len_save);}struct compare_state bozosort(int *ar, int len){  struct compare_state stats;  int i, j, tmp;  stats.reliability = .99;   stats.n_compares = 0;  while(!sorted(ar, len)) {    i = random() % len;    j = random() % len;    if((i < j) &&  compare(ar[i], ar[j], &stats)) {      tmp = ar[i];      ar[i] = ar[j];      ar[j] = tmp;    }  }  return stats;}int *make_random_array(int len){  int *base;  int i;  base = malloc(sizeof(int) * len);  for(i = 0; i < len; i++) {    base[i] = random() % len;  }  return base;}void print_array(int *ar, int len){  int i;  printf("%d", ar[0]);  for(i = 1; i < len; i++)    printf(", %d", ar[i]);  printf("\n");}int main(int argc, char **argv){  struct compare_state stats;  int *ar;  int len;  if(argc != 2)     len = 20;  else    len = atoi(argv[1]);  ar = make_random_array(len);  stats = bozosort(ar, len);  print_array(ar, len);  printf("compares: %d\n", (int)stats.n_compares);  return 0;}