ボゴソートなる量子コンピュータにおいては優秀なソートとなる可能性があるソートがあるらしいのでリハビリがてら実装してみることにした。
#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 乱数が適当すぎるので修正