昨天突发奇想,启发还是在随机数(当然也有蒙特卡洛计算π的启发),今天验证一个。
给一个15个元素的数组,使用随机数,使之从大到小排列。
不同于冒泡、快速、归并等排序哦!
下图,Old是原来的数组,New是最后的结果,count是交换的次数。
后面有程序。
PS:给一个高大上等名字吧,蒙特卡洛排序!
转载请注明出处,联系我: t39q@163.com
本人热衷于数据库技术及算法的研究,志同道合之士, 欢迎探讨
/*语言:C
名称:蒙特卡洛排序*/
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
#define random(x) (rand()%x)
int main()
{
int a[15]={34,67,45,345,346,56,678,453,457,89,12,3,47,90,98};
int temp=-1;
int n,m,j=0;
printf("Old:");
for(n=0;n<14;n++)
{
printf("%d,",a[n]);
}
printf("\n New:");
srand((int)time(0));
for(n=1;n<10000;n++)
{
int n1=random(14);
int n2=random(14);
if(n1<=n2)
{
continue;
}
else
{
if(a[n1]>=a[n2]&&n1>n2)
{
temp=a[n1];
a[n1]=a[n2];
a[n2]=temp;
j++;
}
}
}
for(n=0;n<14;n++)
{
printf("%d,",a[n]);
}
printf("\n conut is %d:",j);
printf("\n");
return 0;
}
转载:https://blog.csdn.net/qq_34677276/article/details/104506177
查看评论