当前位置:首页 » 操作系统 » 排序算法比较

排序算法比较

发布时间: 2022-01-08 12:53:36

1. 排序算法性能比较(数据结构)C语言程序

这题你只要把每个算法的程序代码看一下,在计算下就行
冒泡排序:两个循环,从1加到N,(1+N)N/2 = 500500,最坏交换情况是每次判断都要交换,既500500*3次
选择排序:也是两个循环,比较次数跟冒泡排序一样500500,但是这个只要底层循环交换,既只需1000*3 = 3000次赋值。
插入排序:循环次数一样500500,但是这个最坏情况是每比较一次就赋值一次,既需500500次赋值
希尔排序:时间复杂度是N^1.3倍,比较次数和赋值应该是1000^1.3次方。
归并排序和快速排序,你去查查它的时间复杂度是怎么算,O(lgN*N),好像有系数,算法导论那本书上有,现在不记得是多少了。
希望能帮到你,

2. 几种排序算法的比较

1.稳定性比较
插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的
选择排序、希尔排序、快速排序、堆排序是不稳定的
2.时间复杂性比较
插入排序、冒泡排序、选择排序的时间复杂性为O(n2)
其它非线形排序的时间复杂性为O(nlog2n)
线形排序的时间复杂性为O(n);
3.辅助空间的比较
线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1);
4.其它比较
插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。
反而在这种情况下,快速排序反而慢了。
当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。
若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。
当n较大时,关键字符素比较随机,对稳定性没要求宜用快速排序。
当n较大时,关键字符素可能出现本身是有序的,对稳定性有要求时,空间允许的情况下。
宜用归并排序。
当n较大时,关键字符素可能出现本身是有序的,对稳定性没有要求时宜用堆排序。

3. 几种排序算法效率的比较

插入排序,选择排序,交换排序(冒泡),数据结构书上有详细的介绍
以下是直接插入排序,选择排序,希尔排序,冒泡排序的算法

/*直接插入排序的基本思想是:顺序地把待排序序
列中的各个记录按其关键字的大小,插入到已排
序的序列的适当位置。
*/

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;
}
}
}
}

4. 、题目:各种排序算法实现和比较

给个联系方式。我发给你!!!

5. 各种排序算法的比较

小朋友啊,你这不是问题是作业啊。

6. 关于排序算法比较的问题

楼上的说法不准确吧,不能说比较和交换的次数不是一个级别的,交换也不是最多只有n次。比如一个逆序的数组进行升序的冒泡排序,交换就远远超过n次。
但是假设比较次数为P(n),交换次数为Q(n),那么因为交换发生在比较之后(基本上排序算法都是这样,楼主可以自己想想),必然有Q(n)<=P(n)。如果时间复杂度为T(n),那么显然根据时间复杂度的定义(极限定义),用大O表示法可以忽略Q(n)项(或用P(n)代替Q(n)),仅用P对T进行表示。
因为大O表示法是对时间复杂度上限的一个估计,而这种每比较一次就需要交换的情况确实存在(最差情况),所以在T(n)中使用P(n)对Q(n)进行替换并不会扩大对上限估计,而只是乘以了系数2,在大O表示法中常数项是不写入的。
这些数学分析一般在国内的算法教材中都不写入的,MIT的《ITA》注重这方面的叙述。
关于总结其实楼主可以自己去搜,上来问这行为太懒了。不过我也帮你找来吧。

冒泡法:
这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。
直接插入排序:O(n*n)
选择排序:O(n*n)
快速排序:平均时间复杂度log2(n)*n,所有内部排序方法中最高好的,大多数情况下总是最好的。
归并排序:log2(n)*n
堆排序:log2(n)*n
希尔排序:算法的复杂度为n的1.2次幂

7. 求各种排序算法的比较

给你一个国家集训队的快排吧,这个应该够用了。
这个是对a数组从小到大排序,把这个添加到任何程序中都很快。这个肯定要比堆排序快。对于插入排序快的快排肯定要较慢。但这个比较稳定,要不国家集训队怎么用它呢!!!!!!
procere qsort(l,r:longint);
var
i,j,x,yy:longint;
begin
i:=l;j:=r;x:=a[(i+j) shr 1];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
yy:=a[i];a[i]:=a[j];a[j]:=yy;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;

8. 排序算法比较

Private Sub Command1_Click()
Dim a(1 To 100) As Integer
For i = 1 To 100
a(i) = Int(Rnd * 101)
Next
For i = 1 To 100
For j = 1 To i
If a(i) < a(j) Then t = a(i): a(i) = a(j): a(j) = t
Next
Next
For i = 1 To 100
Print a(i);
If i Mod 10 = 0

9. 数据结构中几种常见的排序算法之比较

实话实说,关于数据结构中几种常见的排序算法(例如:冒泡排序、SHELL排序、归并排序、快速排序等)的性能好坏,还不只是学好了数据结构这门课程就能够解决的问题,还必须要学习好、且精通掌握计算机软件专业的另外一门非常重要的课程,才能够解决这个问题。即:计算机算法复杂性理论。
只有同时把这门课程学好了,那么才能够真正掌握数据结构中的各种排序算法、以及各种查找算法中所有涉及到的:比较次数、以及交换次数,最终才能够根据具体的开发软件规模的不同,选择出一个适合开发该软件的最佳算法。

10. 排序算法的实现和比较

int main()
{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /* 冒泡法排序 */
for(j=0;j<10-i-1;j++)
if(a[j]>a[j+1])
{t=a[j];/* 交换a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;

热点内容
展示迷宫算法 发布:2024-12-25 00:58:25 浏览:438
手机酷我音乐上传歌词 发布:2024-12-25 00:58:14 浏览:796
路由器哪里改密码 发布:2024-12-25 00:53:18 浏览:658
编译原理数组的翻译三地址代码 发布:2024-12-25 00:53:18 浏览:892
全新哈弗h6哪个车型配置够用 发布:2024-12-25 00:51:35 浏览:888
安卓系统部落冲突如何用微信登录 发布:2024-12-25 00:50:08 浏览:363
oracle启动数据库服务 发布:2024-12-25 00:50:03 浏览:66
手机游戏源码开发 发布:2024-12-25 00:48:09 浏览:402
直流屏密码是多少 发布:2024-12-25 00:28:26 浏览:655
汽车配置怎么看马力 发布:2024-12-25 00:23:49 浏览:84