|
〇〇 发表于 2012-1-20 09:16 ![]()
32行用i和index交换貌似不太随机,改成下面这样,24开头的小数就出来了
把交换改成随机取随机打乱,真的接近27
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define ARRAYSIZE 4
- unsigned int inputArray[ARRAYSIZE]={1,3,2};
- int c[3]={1,2,3};
- int a[6][3]={{1,2,3},{2,1,3},{1,3,2},{2,3,1},{3,2,1},{3,1,2}};
- int bozo()
- {
- int sorted = 1;
- unsigned int index = 0;
- unsigned int tmp = 0;
- unsigned int iterationNo = 0;
- unsigned int inputArraySize = 4;
- unsigned int i=0;
- //srand(clock());
- //Checking if it's sorted
- for(i = 0; i < inputArraySize - 1; i++)
- {
- if(inputArray[i] > inputArray[i + 1])
- {
- sorted = 0;
- break;
- }
- }
- //Bogosort Algorithm
- while(sorted == 0)
- {
- //for(i = 0; i < inputArraySize; i++)
- {
- //pick and shuffle 3 values
- index = (rand() % (inputArraySize ));
- unsigned int index1 =index;
- while(index==index1) index1=(rand() % (inputArraySize ));
- unsigned int index2 =index;
- while(index==index2 || index1==index2) index2=(rand() % (inputArraySize ));
-
- c[0]=inputArray[index];
- c[1]=inputArray[index1];
- c[2]=inputArray[index2];
-
- i=(rand() % 6);
- inputArray[index]=c[a[i][0]-1];
- inputArray[index1]=c[a[i][1]-1];
- inputArray[index2]=c[a[i][2]-1];
- }
- sorted = 1;
- iterationNo++;
- //printf("%d ",iterationNo);
- //Checking if it's sorted
- for(i = 0; i < inputArraySize - 1; i++)
- {
- if(inputArray[i] > inputArray[i + 1])
- {
- sorted = 0;
- break;
- }
- }
- }
- //printf("%d ",iterationNo);
- return iterationNo;
- }
- int main(int argc, char **argv)
- {
- int sum=0;
- int b[24][4]={{1,2,3,4},{2,1,3,4},{1,3,2,4},{2,3,1,4},{3,2,1,4},{3,1,2,4},
- {4,1,2,3},{4,2,1,3},{4,1,3,2},{4,2,3,1},{4,3,2,1},{4,3,1,2},
- {1,4,2,3},{2,4,1,3},{1,4,3,2},{2,4,3,1},{3,4,2,1},{3,4,1,2},
- {1,2,4,3},{2,1,4,3},{1,3,4,2},{2,3,4,1},{3,2,4,1},{3,1,4,2}};
- srand((unsigned) time(NULL));
- for(int k=0;k<100;k++)
- for(int i=0;i<24;i++) //7 don't finish
- {
- for(int j=0;j<4;j++)
- {
- inputArray[j]=b[i][j];
-
- }
-
- sum+=bozo();
- }
- printf("avg=%5.2f",sum/24.0/100);
- return 1;
- }
复制代码 |
|