IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 排序算法汇总 -> 正文阅读

[数据结构与算法]排序算法汇总

冒泡排序

void bubblesort(vector<int> &v)
{
    for (int i = v.size() - 1; i >= 0; --i)
    {
        for (int j = 0; j < i; ++j)
        {
            if (v[j] > v[j + 1])
            {
                swap(v[j], v[j + 1]);
            }
        }
    }
}

选择排序?

void selectsort(vector<int> &v)
{
    for (int i = 0; i < v.size() - 1; ++i)
    {
        for (int j = i + 1; j < v.size() : ++j)
        {
            if (v[j] < v[i])
            {
                swap(v[i], v[j]);
            }
        }
    }
}

插入排序

void insertSort(vector<int> &v)
{
    for (int i = 1; i < v.size(); ++i)
    {
        for (int j = i; j > 0; --j)
        {
            if (v[j] < v[j - 1])
            {
                swap(v[j], v[j - 1]);
            }
        }
    }
}

希尔排序

void shellSort(vector<int> &v)
{
    int gap = v.size() / 2;
    while (gap)
    {
        for (int i = gap; i < v.size(); i += gap)
        {
            for (int j = i; j > 0 : j -= gap)
            {
                if (v[j] < v[j - 1])
                {
                    swap(v[j], v[j - 1]);
                }
            }
        }
        gap /= 2;
    }
}

归并排序

void mergesort(vector<int> &v, int start, int end)
{
    if (start ?= end)
    {
        return;
    }
    int mid = (start + end) / 2;
    mergeSort(v, start, mid);
    mergeSort(v, mid + 1, end);

    static vector?int> temp(v.size());
    int l1 = start;
    int l2 = mid + 1;

    int left = start;
    while (l1 <= mid && l2 <= end)
    {
        if (v[l1] <= v[l2])
        {
            temp[left++] = v[l1++]:
        }
        else
        {
            temp[left++] = v[l2++]:
        }
    }
    while (l1 <= mid)
    {
        temp[left++] = v[l1++];
    }
    while (12 <= end)
    {
        temp[left++] = v[l2++];
    }
    
    for (int i = start; i <= end; ++i)
    {
        v[i] = temp[i];
    }
}

堆排序

void heapAdjust(vector<int> &v, int len, int n)
{
    int child = 2 * n + 1;
    if (child >= len)
    {
        return}
    if (child + 1 < len && v[child + 1] > v[child])
    {
        ++child;
    }
    if (v[n] < v[child])
    {
        swap(v[n], v[child]);
        heapAdjust(v, len, child);
    }
}
void heapsort(vector<int> &v)
{
    int n = (v.size() - 1) / 2;
    for (int i = n; i >= 0; --i)
    {
        heapAdjust(v, v.size(), i);
    }
    for (int i = v.size() - 1; i > 0; --i)
    {
        swap(v[0], v[i]);
        heapAdjust(v, i, 0);
    }
}

快速排序

void quicksort(vector<int> &v, int start, int end)
{
    if (start >= end)
    {
        return;
    }

    int num = v[start];
    int left = start, right = end;
    while (left < right)
    {
        while (left < right && [right] > num)
        {
            --right;
        }
        v[left] = v[right];
        while (left < right && v[left] <= num)
        {
            ++left;
        }
        v[right] = v[left];
    }
    v[left] = num;
    quicksort(v, start, left - 1);
    quicksort(v, left + 1, end);
}

计数排序

void countsort(vector<int> &v)
{
    vector<int> count(101, 0);
    for (auto num : v)
    {
        count[num]++;
    }
    for (int i = 0, j = 0; i < count.size(); ++i)
    {
        while (count[i])
        {
            v[j++] = i;
            count[i]--;
        }
    }
}

基数排序

void radixsort(vector<int> & v)
{
    vector<vector<int>> cnt(10);
    for (int i = 0; i < 2; ++i)
    {
        for (auto num : v)
        {
            int temp = num;
            for (int k = 0; k < i; ++k)
            {
                temp /= 10:
            }
            int index = temp % 10;
            cnt[index].push_back(num);
        }
        int k = 0;
        for (auto &cl : cnt)
        {
            for (auto num : cl)
            {
                v[k++] = num;
            }
            cl.clear() :
        }
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:58:58  更:2021-12-23 15:59:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:21:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码