首页 > 编程语言 >常用排序算法

常用排序算法

时间:2022-12-02 10:57:57浏览次数:33  
标签:tmp p2 常用 p1 int ++ 算法 array 排序

常见排序算法

选择排序

void selectSort(vector<int>& array)
{
    size_t length = array.size();
    int i, j;
    int min;
    int t;
    for (i = 0; i < length; i++)
    {
        min = i;
        for (j = i + 1; j < length; j++)
        {
            if (array[j] < array[min])
                min = j;
        }
        if (min != i)
        {
            t = array[min];
            array[min] = array[i];
            array[i] = t;
        }
    }
}

插入排序

void insertSort(vector<int>& array)
{
    size_t length = array.size();
    for (int i = 1; i < length; i++)
    {
        if (array[i - 1] > array[i])
        {
            int tmp = array[i];
            int j = i - 1;
            while (j >= 0 && array[j] > tmp)
            {
                array[j + 1] = array[j];
                j -= 1; 
            }
            array[j + 1] = tmp;
        }
    }
}

希尔排序

void shellSort(vector<int>& array)
{
    size_t length = array.size();
    for (int step = length / 2; step > 0; step /= 2)
    {
        for (int i = step; i < length; i++)
        {
            if (array[i - step] > array[i])
            {
                int tmp = array[i];
                int j = i - step;
                while (j >= 0 && array[j] > tmp)
                {
                    array[j + step] = array[j];
                    j -= step;
                }
                array[j + step] = tmp;
            }
        }
    }
}

归并排序

void mergeSort(vector<int> &array, const int &start, const int &end, vector<int> &tmp)
{
    if (start >= end)
        return;
    int mid = start + (end - start + 1) / 2;
    mergeSort(array, start, mid - 1, tmp);
    mergeSort(array, mid, end, tmp);
    int p1 = start;
    int p2 = mid;
    int pos = start;
    while (p1 < mid || p2 <= end)
    {
        if (p1 == mid)
        {
            while (p2 <= end)
                tmp[pos++] = array[p2++];
        }
        else if (p2 > end)
        {
            while (p1 < mid)
                tmp[pos++] = array[p1++];
        }
        else
        {
            if (array[p1] < array[p2])
                tmp[pos++] = array[p1++];
            else
                tmp[pos++] = array[p2++]; 
        }
    }
    for (int i = start; i <= end; i++)
        array[i] = tmp[i];
}

快速排序

inline void quickSort(vector<int>& array, const int &left, const int & right)
{
    if (left >= right)
        return;

    int tmp = array[left];
    int p1 = left;
    int p2 = right;

    while (p1 != p2)
    {
        while (array[p2] >= tmp && p1 < p2)
            --p2;
        while (array[p1] <= tmp && p1 < p2)
            ++p1;
        if (p1 < p2)
        {
            int t = array[p1];
            array[p1] = array[p2];
            array[p2] = t;
        }
    }

    array[left] = array[p1];
    array[p1] = tmp;

    quickSort(array, left, p1 - 1);
    quickSort(array, p1 + 1, right);
}

标签:tmp,p2,常用,p1,int,++,算法,array,排序
From: https://www.cnblogs.com/TNTksals/p/16943710.html

相关文章

  • Java学习-笔记本电脑常用快捷键
    #笔记本电脑常用快捷键笔记本快捷键大全图解-百度经验          ......
  • 道长的算法笔记:通过回溯暴力枚举
    (一)排列与组合通常通常循环来做暴力枚举是有局限性,通过回溯算法来做枚举往往会更加优雅,回溯算法中两个重要的模型便是组合模型与排列模型。题目思路描述LC......
  • 【MySQL数据割接案例】实现按某个字段分组,再将组内的排序序号更新为排序字段的值
    事情是这样的,原本设计了一个树状结构的目录表,目录下面的节点(类似于文件)有多个类型的。由于原先只考虑一种类型A的数据,因此将目录下目录项的排序维护在了A数据表里,后面扩展......
  • Oracle常用脚本
    经常忘记一些oracle语法,在此做一下记录吧,每逢遇到新的脚本,就记录在此。1.通过存储过程的方式,将图片插入blob字段,创建目录并授权createdirectory  D_FILEas'/home/......
  • 雪花算法简介
    雪花算法背景需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。数据库分表将不同......
  • 十大经典排序算法(动图演示)
      0、算法概述0.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比......
  • Docker常用命令
    安装:docker-ce:curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-sudoapt-getinstalldocker-cenvidiadocker:wgethttps://github......
  • 【简单总结】SLAM 算法的 Benchmark 及相关数据集的结果对比
    前言与参考主要是copy一下总结,方便自己后续找方案特定使用,所有的出处均在标题处和原链接跳转,此处仅做各个benchmark收集使用,如果有原作者觉得侵权,请联系我将全力配合相关......
  • 指针实现字符串排序
    题目描述在主函数中输入5个字符串(每个字符串的长度不大于20),并输出这5个字符串。编写一个排序函数,完成对这些字符串按照字典顺序排序。然后在主函数中调用该排序函数,并输......
  • MySQL 常用操作
    环境MySQL 8.01、创建用户及授权创建一个只能查看数据的用户,4条命令搞定。直接上图   关键命令如下mysql-uroot-p//mysql-u{mysql超级用户名}-p//回车......