How to spend the terminal

技術ブログでさえない

C言語におけるボゴソート

ボゴソートなる量子コンピュータにおいては優秀なソートとなる可能性があるソートがあるらしいのでリハビリがてら実装してみることにした。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int array[10];  // 配列
  int t;  // 格納変数
  int i;  // 反復変数
  int size; // 入力数
  int f;  // 条件変数
  int r1,r2;  // ランダム
  
  size = 0;  // 入力数の初期化
  
  while( 1 ) {  // -1が出るまで入力
    scanf("%d",&t);
    if( t == -1 ) { break; }
    array[size] = t;
    size++;
  }
  
  while( 1 ) {  // ボゴソート
    f = 0;  // 条件の初期化
    for( i=0; i<size-1; i++ ) {
      if( array[i] > array[i+1] ) {
        f = 1;
      }
    }
    if( f ) { // ランダムに入れ替える
      r1 = (int)((rand()/(RAND_MAX+1.0))*size);
      r2 = (int)((rand()/(RAND_MAX+1.0))*size);
      
      t = array[r1]; 
      array[r1] = array[r2];
      array[r2] = t;
    } else {
      break;
    }
  }
  
  for( i=0; i<size; i++ ) { // 列挙
    printf("%d ",array[i]);
  }
  
  return 0;
}

でたらめに交換していくようだ。
調べると無限の猿定理とか出てきて奥深い...???
でたらめに交換していくという単純なソートなので覚えていても損はない?(実用的ではないが)

2015.05.01 乱数が適当すぎるので修正