数据结构常见的排序

1、冒泡排序--

    两层循环的run,有一个优化指出就是当后面的数打于前面一个是可以结束一个循环这样可以节省时间;

2、插入排序,最好情况为O(NlogN):

void insertSort(int *a,const int &length)

{

    int n=length;

    int j;

    for(int i=1;i<n;i++)

    {

        int temp=a[i];

        for( j=i;j>0;j--)

        {

            if(temp<a[j-1])

            {

                a[j]=a[j-1];

            }

            else

                break;

        }

        a[j]=temp;

    }

}

3、希尔排序,每次有一个key,key=key/2

void SortHill(int *a,int length,int arrange)

{

    int add=arrange/2;

    while(add!=0)

    {

        for(int i=0;i+add<length;i++)

        {

            if(a[i]>a[i+add])

            {

                int temp=a[i+add];

                a[i+add]=a[i];

                a[i]=temp;

            }

        }

        add=add/2;

    }

}

4、归并排序,前提是归并的几个序列是有序的哈:

void mergerSort(int *a ,int n1,int *b ,int n2,int *c)

{

    int apre=0,cur=0,index=0;

    for(;1;)

    {

        if(a[apre]>=b[cur])

        {

            c[index++]=b[cur];

            cur++;

            

        }

        else

        {

            c[index++]=a[apre];

            apre++;

            

        }

        if(apre==n1||cur==n2)

            break;

            }

    while(apre<n1)

    {

        c[index++]=a[apre++];

    }

    while(cur<n2)

    {

        c[index++]=b[cur++];

    }

}

5、快速排序:

void quickSort(int *a,int n)

{

    int i=0,j=n-1;

    while(i!=j)

    {

       if(a[i]>=a[j])

       {

           int temp=a[j];

           a[j]=a[i];

           a[i]=temp;

           j--;

       }

        if(a[i]<a[j])

        {

            i++;

        }

    }

}

6、桶排序O(N+M):

void bucketsort(int *a,int n,int *s)

{

    for(int i=0;i<n;i++)

    {

        s[a[i]]+=1;

    }

}


测试:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不同的排序方法适用于不同的数据结构排序需求。以下是几种常见排序方法: 1. 堆排序(Heapsort) - 堆排序是一种选择排序的算法,使用堆这种数据结构进行排序。堆是一种完全二叉树,且满足父节点的值大于等于(或小于等于)其子节点的值。在堆排序中,首先将待排序的数据构建成一个大顶堆(或小顶堆),然后将堆顶元素与最后一个元素交换,然后对剩下的元素进行调整,重复这个过程直到所有元素都有序。堆排序的时间复杂度为O(nlogn)。 2. 希尔排序(Shell Sort) - 希尔排序是直接插入排序的一种改进版本,它通过将待排序的数据分成若干个子序列,分别进行插入排序,最后再进行一次整体的插入排序。希尔排序的特点是通过减小增量的方式,使得每一轮的排序数据规模减小,从而提高了排序的效率。希尔排序的时间复杂度取决于增量序列的选取,一般情况下为O(nlogn)。 3. 归并排序(Merge Sort) - 归并排序是一种基于分治法的排序算法,它将待排序的数据分成两个子序列,分别进行排序,然后将排序好的子序列合并成一个有序序列。归并排序的核心思想是将大问题不断划分为小问题,然后通过合并解决小问题,最终得到整个问题的解。归并排序的时间复杂度为O(nlogn)。 这些排序方法各有优缺点,适用于不同的场景和数据结构。选择合适的排序方法可以提高排序的效率和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值