排序代码

算法

平均时间复杂度

空间复杂度

最坏情况

排序方式

稳定性

归并排序

O(n log n)

O(n)

O(n log n)

稳定

选择排序

O(n^2)

O(1)

O(n log n)

不稳定

堆排序

O(n log n)

O(1)

O(n log n)

不稳定

插入排序

O(n^2)

O(1)

O(n^2)

稳定

希尔排序

O(n log^2 n)

O(1)


不稳定

快速排序

O(n log n)

O(log n)

O(n^2)

不稳定

冒泡排序

O(n^2)

O(1)

O(n^2)

稳定

基数排序k是关键字取值范围

O(n)

O(k)


稳定

冒泡排序:重的泡泡下沉。
    bool flag = true; 
    for (int i = 1; i < zq.size(); ++i) //第一层循环,最多要冒泡数组个数-1次才能排完序
    { 
        flag = false; 
        for (int j = 0; j < (zq.size() - i); ++j) //第二层循环,循环次数为数组总个数 - 第几个元素。        { 
            if (zq[j + 1] < zq[j]) 
            { 
                flag = true;
                temp = zq[j + 1]; 
                zq[j + 1] = zq[j]; 
                zq[j] = temp; 
            } 
        } 
    } 
快速排序:选一个界点(这里是第一个数),小的放左边,大的放右边,递归。
void quick_sort(vector<int>&zq, int left, int right)
{ 
    if (left > right) 
        return; 
    int i = left + 1; 
    int j = right; 
    int temp = zq[left]; //界点
    while (i <= j) 
    { 
        while (zq[i] < temp)
            i++; 
        while (zq[j] > temp) 
            j--; 
        if (i < j) 
            swap(zq[i++], zq[j--]); 
        else 
            i++; 
    } 
    swap(zq[j], zq[left]); //j就是界点应该的位置
    quick_sort(zq,left,j-1); //界点左侧分治
    quick_sort(zq,j+1,right);//界点右侧分治
}
归并排序:核心两个有序表合并一个。把每个元素看成一个有序表
void merge(vector<int>&zq, int low, int mid, int high)
 {      //low为第一有序区第一元素,mid为第一有序区最后元素
    int i = low, j = mid + 1,count=low;
    while (i <= mid && j <= high)
    {
        if (zq[i] <= zq[j])
            result[count++] = zq[i++];
        else
            result[count++] = zq[j++];
    }
    while (i <= mid)//比较完后,第一区仍有剩余
        result[count++] = zq[i++];
    while (j <= high)//比较完后,第二区仍有剩余
        result[count++] = zq[j++];
    for (int i = low; i <= high; i++)
        zq[i] = result[i];
 }
 void mergesort(vector<int>&zq,int low,int high)
 {
    if (low < high)
    {
        int mid = (low + high) / 2;
        mergesort(zq, low, mid);
        mergesort(zq, mid + 1, high);
        merge(zq, low, mid, high);
    }
 }

全部评论

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-15 14:22
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务