最小显著差数法 (least significant difference)
简称 LSD法,实质上是t测验。
程序:处理间 F测验显著的前提下,计算出显著水平为α的最小显著差数LSD α ;任何两个平均数的差数 ,如其绝对值≥LSD α ,即为在α水平上显著;反之,则为在α水平上不显著。该法又称为F测验保护最小显著差数法(Fisher's Protected LSD, FPLSD)
lsd法多重比较是指Least Significant Digit(最低有效位)法多重比较,是一种排序算法,可以快速地将一组数据按照从小到大的顺序排序。它的基本思想是从最低有效位开始比较,如果最低有效位相同,就比较次低有效位,以此类推,直到比较的有效位全都相同,则比较完成。lsd法多重比较的优点是它可以很快地将一组数据排序,而且不需要分配额外的存储空间,只需要一次遍历即可完成排序。另外,它还可以用于解决问题,如求解线性规划问题和字符串匹配问题。
C语言源代码:
#include<stdio.h>
#include <stdlib.h>
#define N 1024
int RadixCountSort(int* npIndex, int nMax, int* npData, int nLen)
{
int* pnCount = (int*)malloc(sizeof(int)* nMax) //保存计数的个数
int i=0
for (i = 0 i < nMax ++i)
{
pnCount[i] = 0
}
for (i = 0 i < nLen ++i) //初始化计数个数
{
++pnCount[npIndex[i]]
}
for (i = 1 i < 10 ++i) //确定不大于该位置的个数。
{
pnCount[i] += pnCount[i - 1]
}
int * pnSort = (int*)malloc(sizeof(int) * nLen) //存放零时的排序结果。
//注意:这里i是从nLen-1到0的顺序排序的,是为了使排序稳定。
for (i = nLen - 1 i >= 0 --i)
{
--pnCount[npIndex[i]]
pnSort[pnCount[npIndex[i]]] = npData[i]
}
for (i = 0 i < nLen ++i) //把排序结构输入到返回的数据中。
{
npData[i] = pnSort[i]
}
free(pnSort) //记得释放资源。
free(pnCount)
return 1
}
//基数排序
int RadixSort(int* nPData, int nLen)
{
//申请存放基数的空间
int* nDataRadix = (int*)malloc(sizeof(int) * nLen)
int nRadixBase = 1 //初始化倍数基数为1
int nIsOk = 0 //设置完成排序为false
int i
//循环,知道排序完成
while (nIsOk==0)
{
nIsOk = 1
nRadixBase *= 10
for (i = 0 i < nLen ++i)
{
nDataRadix[i] = nPData[i] % nRadixBase
nDataRadix[i] /= nRadixBase / 10
if (nDataRadix[i] > 0)
{
nIsOk = 0
}
}
if (nIsOk==1) //如果所有的基数都为0,认为排序完成,就是已经判断到最高位了。
{
break
}
RadixCountSort(nDataRadix, 10, nPData, nLen)
}
free(nDataRadix)
return 1
}
int main(int argc,char *argv[])
{
int i=0
int j
int nData[N]
printf("请输入你要排序的个数:")
scanf("%d",&j)
if(j==0) return 0
printf("请输入的%d个整数:",j)
for(i=0i<ji++)
{
scanf("%d",&nData[i])
}
RadixSort(nData, j)
printf("基数排序法排序后:\n")
for (i = 0 i < j ++i)
{
printf("%d ", nData[i])
}
printf("\n")
return 0
}
运行效果如图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)