开发者社区> 问答> 正文

几种排序算法效率的比较

几种排序算法效率的比较

展开
收起
知与谁同 2018-07-22 19:34:24 2004 0
1 条回答
写回答
取消 提交回答
  • 插入排序,选择排序,交换排序(冒泡),数据结构书上有详细的介绍
    以下是直接插入排序,选择排序,希尔排序,冒泡排序的算法

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

    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;
    }
    }
    }
    }
    2019-07-17 22:49:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载