首页 > 编程语言 >短视频开发app,不会还有人不知道这些排序算法吧

短视频开发app,不会还有人不知道这些排序算法吧

时间:2024-04-28 09:01:56浏览次数:26  
标签:int app 算法 排序 Data 复杂度 left

一、快速排序(Quick Sort)

快速排序采用分治法。首先从短视频开发app的数列中挑出一个元素作为中间值。依次遍历数据,所有比中间值小的元素放在左边,所有比中间值大的元素放在右边。然后按此方法对左右两个子序列分别进行递归操作,直到所有数据有序。最理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分(均匀排布),整个算法的时间复杂度为O(n logn)。 最坏的情况是,每次所选的中间数是当前序列中的最大或最小元素(正序和逆序都是最坏),整个排序算法的时间复杂度为O(n²)。

平均时间复杂度为O(n logn),空间复杂度为O(logn),是一种不稳定的排序算法。

附算法实现源码:

//快速排序
template <class T>
int Partition(T data[],int left,int right)
{
    T pivot=data[left];
    while(left<right)
    {
        while(left<right&&data[right]>pivot)
            right--;
        data[left]=data[right];
        while(left<right&&data[left]<=pivot)
            left++;
        data[right]=data[left];
    }
    data[left]=pivot;
    return left;
}
template <class T>
void QuickSort(T data[],int left,int right)
{

if(left<right)
{
    int p=Partition(data,left,right);
    QuickSort(data,left,p-1);
    QuickSort(data,p+1,right);
}
}

 

二、选择排序(Selection Sort)

遍历短视频开发app的所有数据,先在数据中找出最大或最小的元素,放到序列的起始;然后再从余下的数据中继续寻找最大或最小的元素,依次放到序列中直到所有数据有序。原始数据的排列顺序不会影响程序耗费时间O(n²),相对费时,不适合大量数据排序。

平均时间复杂度为O(n²),空间复杂度为O(1),是一种不稳定的排序算法。

附算法实现源码:

//选择排序
template <class T>
void SelectionSort(T data[],int n)
{
    for(int i=1;i<n;i++)
    {
        int k=i-1;
        for(int j=i;j<n;j++)
        {
            if(data[j]<data[k])
            {
                k=j;
            }
        }
        if(k!=i-1)
        {
            T t=data[k];
            data[k]=data[i-1];
            data[i-1]=t;
        }
    }
}

 

三、插入排序(Insertion Sort)

将前i个(初始为1)数据假定为有序序列,依次遍历数据,将当前数据插入到前述有序序列的适当位置,形成前i+1个有序序列,依次遍历完所有数据,直至序列中所有数据有序。数据是反序时,耗费时间最长O(n²);数据是正序时,耗费时间最短O(n)。适用于部分数据已经排好的少量数据排序。

平均时间复杂度为O(n²),空间复杂度为O(1),是一种稳定的排序算法。

附算法实现源码(直接插入+折半插入):

//直接插入排序
template <class T>
void InsertionSort(T Data[],int n)
{
    int p,i;
    for(p=1;p<n;p++)
    {
        T temp=Data[p];
        i=p-1;
        while(i>=0&&Data[i]>temp)
        {
            Data[i+1]=Data[i];
            i--;
        }
        Data[i+1]=temp;
    }
}



//折半插入排序
template <class T>
void BinaryInsertionSort(T Data[],int n)
{
    int left,mid,right,p;
    for(p=1;p<n;p++)
    {
        T temp=Data[p];
        left =0;
        right=n-1;
        while(left<=right)
        {
            mid=(left+right)/2;
            if(Data[mid]>temp)
                right=mid-1;
            else
                left=mid+1;
        }
        for(int i=p-1;i>=left;i--)
            Data[i+1]=Data[i];
        Data[left]=temp;
    }
}

 

四、希尔排序(Shell Sort)

希尔排序也称递减增量排序,是对插入排序的改进,以牺牲短视频开发app的稳定性的方法提高效率。基本思路是先将整个数据序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全部数据进行依次直接插入排序,直至所有数据有序。希尔排序算法的性能与所选取的分组长度序列有很大关系,复杂度下界为O(n log²n),在中等规模的数据中表现良好。

平均时间复杂度为O(n^3/2),空间复杂度为O(1),是一种不稳定的排序算法。

附算法实现源码:

//希尔排序
template <class T>
void ShellSort(T Data[],int n)
{
    int d=n/2;
    while(d>=1)
    {
        for(int k=0;k<d;k++)
        {
            for(int i=k+d;i<n;i+=d)
            {
                T temp=Data[i];
                int j=i-d;
                while(j>=k&&Data[j]>temp)
                {
                    Data[j+d]=Data[j];
                    j-=d;
                }
                Data[j+d]=temp;
            }
        }
        d=d/2;
    }
}

 

以上就是短视频开发app,不会还有人不知道这些排序算法吧, 更多内容欢迎关注之后的文章

 

标签:int,app,算法,排序,Data,复杂度,left
From: https://www.cnblogs.com/yunbaomengnan/p/18162944

相关文章

  • 数据结构与算法学习(1)——BFS(广度优先搜索)
    BFS基础BFS会从根节点开始搜索,在每一个路口面临分叉的时候,先把每个岔路记录下来,然后再去一个一个的往前走一步。节点进行广度优先搜索的顺序题目PS:下列题目均来自leetcode中灵神题单1311.获取你好友已观看的视频......
  • SpringMVC(1)-@RequestMapping的简单使用
    本文核心内容来自于韩顺平老师的课程@RequestMapping注解可以用来指定控制器或者处理器的某个方法的请求url@ControllerpublicclassUserServlet{@RequestMapping("/login")publicStringlogin(){return"login";}}1@RequestMappi......
  • 瑞士轮——结构体&&(快速排序 or 归并排序?)
    题目链接:https://www.luogu.com.cn/problem/P1309题意应该非常明确了(这里就不细讲了):有2*N个人,首先根据成绩进行排序,相邻的两个人进行比赛,强的人成绩+1,输的人成绩不变,最后又根据成绩进行排序,进行r次操作,如果成绩相同,初始时序号在前的排前面,最后输出第q个人的序号。思路:用快......
  • Floyd算法
    Floyd首先,对该算法有一个大致的了解:通过动态规划的方式,按顺序对每两个点之间的最短距离进行处理而这个顺序用一句话总结就是:依次将每个点作为"中间点"做更新1、存储邻接矩阵存储用两个数组存储信息一个存储两点长度一个存储路径Path其中,D(-1)表......
  • 机器学习-K近邻算法-KNN
    1K-紧邻算法简介1.1什么是K-近邻算法直观上理解,就是根据距离的远近来判断你所处于的类别。但是,也会存在一些问题,距离最近的样本所属于的类别与你需要判断的类别可能不是同一种类别。1.1KNN概念KNearestNeighbor算法又叫做KNN算法,这个算法是机器学习里面比较经典的算法,总......
  • 基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述3.1混沌系统特性       混沌系统是一类具有确定性、非线性、初值敏感性、遍历性和伪随机性等特性的动力学系统。其主要特性包括: 确定性:混沌系统由一组确定性微分方程或差分方程描述......
  • 次梯度算法的收敛性
    次梯度算法: 梯度下降法的迭代格式为$$x_{k+1}=x_k-\alpha_k\nablaf(x_k)$$ 但是对于不可微的凸函数,梯度并不存在,于是使用此梯度算法: $$x_{k+1}=x_k-\alpha_kg_k)$$其中$g_k\in\partialf(x_k)$次梯度算法的收敛性证明:假设:$f$是凸函数且存在最小值点$f^*$,且是$G-$利普西茨连......
  • EPAI手绘建模APP资源管理和模型编辑器1
    (10) 资源① 打开资源管理页面。图 15 资源列表-模型 图 16 资源列表-图层 图 17 资源列表-相机 图 18 资源列表-灯光② 资源管理页面包括模型列表、图层列表、相机列表、灯光列表;包括颜色选择页面、贴图选择页面、材质选择页面、样式选择页面。③ 模型......
  • uniapp-common.css
    /*by:https://www.cnblogs.com/zzz7/p/15593167.html*/page{height:100%;width:190%;background-color:#F8F8F8;}.container{height:100%;width:100%;}/*主题色*/.main-color{color:#1bbf80;}.white-color{color:#ffffff;......
  • 偶然看到一个古老的算法
    只能说秦哥牛批!!!那个破三角公式到现在还没记住c++代码实现#include<bits/stdc++.h>usingnamespacestd;intn;intmain(){cin>>n;//输入多项式的次数double*a=newdouble[n+1];//n次多项式申请n+1大小的数组for(inti=n;i>=0;i--)//输入多项式的系数(......