排序代码

算法

平均时间复杂度

空间复杂度

最坏情况

排序方式

稳定性

归并排序

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
07-09 19:25
门头沟学院 Java
这是要把每一个投校招的都开盒吗?
26届之耻将大局逆转:裁人的时候一次性追回餐费
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务