关于排序算法效率的
发布网友
发布时间:2022-04-30 08:35
我来回答
共3个回答
热心网友
时间:2022-06-19 21:38
先设一个时间控件,其周期(interval)为1(毫秒);其enabled=false
在时间控件中,设置一个计数器,进行计数,即每毫秒计数一次;
在计算排序的事件中,第一行写上timer1.enabled=true,让计数器进行计数,最后一行再设为false,中间为算法.再把时间控件中的计数数值取出即为本排序法的所用的时间.另一排序法也同此理.然后进行比较就可以了.
热心网友
时间:2022-06-19 21:38
插入排序,选择排序,交换排序(冒泡),数据结构书上有详细的介绍
以下是直接插入排序,选择排序,希尔排序,冒泡排序的算法
/*直接插入排序的基本思想是:顺序地把待排序序
列中的各个记录按其关键字的大小,插入到已排
序的序列的适当位置。
*/
void InsertSort(elemtype x[], int n)
{
int i,j;
elemtype s;
for(i=0;i<n-1;i++)
{
s = x[i+1];
j = i;
while(j>-1 && s.key<x[j].key)
{
x[j+1] = x[j];
j--;
}
x[j+1]=s;
}
}
/*选择排序的基本思想是:不断从待排序的序列中
选取关键字最小的记录放到已排序的记录序列的
后面,知道序列中所有记录都已排序为止。
*/
void SelectSort(elemtype x[], int n)
{
int i,j,Small;
elemtype Temp;
for(i=0;i<n-1;i++)
{
Small = i;
for(j=i+1;j<n;j++)
{
if(x[j].key<x[Small].key)
Small = j;
}
if(Small!=i)
{
Temp = x[i];
x[i] = x[Small];
x[Small] = Temp;
}
}
}
/*希尔排序的基本思想是:不断把待排序的记录分
成若干个小组,对同一组内的记录进行排序,在
分组时,始终保证当前组内的记录个数超过前面
分组排序时组内的记录个数。
*/
void ShellSort(elemtype x[], int n, int d[], int Number)
{
int i, j, k, m, Span;
elemtype s;
for(m=0;m<Number;m++)
{
Span = d[m];
for(k=0;k<Span;k++)
{
for(i=k;i<n-Span;i+=Span)
{
s = x[i+Span];
j = i;
while(j>-1 && s.key<x[j].key)
{
x[j+Span] = x[j];
j-=Span;
}
x[j+Span] = s;
}
}
}
}
/*冒泡排序的基本思想是:将待排序序列中第一个
记录的关键字R1与第二个记录的关键字R2做比较,
如果R1>R2,则交换R1和R2的位置,否则不交换;
然后继续对当前序列中的第二个记录和第三个记
录同样的处理,依此类推。
*/
void BubbleSort(elemtype x[], int n)
{
int i,j,flag=1;
elemtype temp;
for(i=1;i<n && flag==1;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(x[j].key>x[j+1].key)
{
flag=1;
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
}
热心网友
时间:2022-06-19 21:39
按最大的算,只是算个理论值如冒泡
for(1..n)
for(1..n)
这就是n二次方,是比较大的