C/C++实现八大排序算法汇总

C/C++实现八大排序算法汇总

简介

本文旨在介绍常用的八大排序算法并用 C/C++ 语言实现。

八大排序算法包括:

  1. 冒泡排序(Bubble Sort)
  2. 插入排序(Insertion Sort)
  3. 选择排序(Selection Sort)
  4. 快速排序(Quick Sort)
  5. 归并排序(Merge Sort)
  6. 希尔排序(Shell Sort)
  7. 堆排序(Heap Sort)
  8. 计数排序(Counting Sort)

冒泡排序(Bubble Sort)

冒泡排序是经典的交换排序算法,其基本思想是两两比较相邻元素,如果顺序不对就交换。每一轮都会将当前未排序的元素的最大值或最小值冒泡到数组的尾部或者头部。时间复杂度为 O(n^2)。

以下是使用 C++ 实现冒泡排序的示例代码:

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

快速排序(Quick Sort)

快速排序是一种经典的递归排序算法,思路是以一个基准元素为标准,将数组分为两个子数组,一个子数组所有元素均小于等于基准元素,另一个子数组所有元素均大于等于基准元素,然后递归地对子数组进行快速排序。快速排序的时间复杂度为 O(nlogn)。

以下是使用 C++ 实现快速排序的示例代码:

int partition(int arr[], int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j <= high - 1; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(arr[i], arr[j]);
        }
    }
    swap(arr[i+1], arr[high]);
    return i+1;
}

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

计数排序(Counting Sort)

计数排序是一种非比较排序算法,适用于元素分布较为均匀的情况。其基本思想是寻找数组中最小值 min,将数组中所有元素都减去 min,然后统计每个数值为 i - min 的元素个数,再通过前缀和得到小于等于 i - min 的元素总数 c[i],然后将该元素放入输出数组相应的位置。计数排序的时间复杂度为 O(n + k),其中 k 是数据范围。

以下是使用 C++ 实现计数排序的示例代码:

void countingSort(int arr[], int n, int k) {
    int count[k+1] = {0};
    for (int i = 0; i < n; i++) {
        count[arr[i]]++;
    }
    for (int i = 1; i <= k; i++) {
        count[i] += count[i - 1];
    }
    int output[n];
    for (int i = n - 1; i >= 0; i--) {
        output[count[arr[i]] - 1] = arr[i];
        count[arr[i]]--;
    }
    for (int i = 0; i < n; i++) {
        arr[i] = output[i];
    }
}

总结

本文介绍了八大排序算法,并提供了使用 C/C++ 实现的示例代码。在实际开发中,要根据不同的场景选择不同的排序算法,以满足不同的需求。同时,也要注意算法的时间复杂度和空间复杂度,以及算法的稳定性等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++实现八大排序算法汇总 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python排序算法之插入排序及其优化方案详解

    Python排序算法之插入排序及其优化方案详解 排序算法是程序员必须学习的基本算法之一,而插入排序算法是其中较为简单和实用的一种,本文将详细介绍插入排序算法的原理以及其常见优化方案。 插入排序算法 插入排序算法是一种简单直观的排序算法,其基本思想是将一个待排序的序列分解成两个子序列,其中一个序列比另一个序列要少一个元素,然后将元素一个一个地从未排序的子序列中…

    算法与数据结构 2023年5月19日
    00
  • 归并排序时间复杂度过程推导详解

    归并排序时间复杂度过程推导详解 什么是归并排序 归并排序是一种基于分治思想的排序算法,将一个无序的数组划分成若干子数组,对每个子数组进行排序,然后再将排好序的子数组进行合并,最终得到一个完整有序的数组。 归并排序的时间复杂度 归并排序的时间复杂度是O(nlogn),其中n表示数组的长度。接下来我们将详细讲解归并排序的时间复杂度推导过程。 假设有一个长度为n的…

    算法与数据结构 2023年5月19日
    00
  • Python实现希尔排序,归并排序和桶排序的示例代码

    Python实现希尔排序,归并排序和桶排序的示例代码 希尔排序 算法思想 希尔排序是插入排序的一种改进版本,它的基本思想是将待排序的数组分割成若干个子序列,对每个子序列进行插入排序,然后再将整个序列逐步缩小进行排序,直至最后整个序列排序完成。 示例代码 def shell_sort(arr): n = len(arr) gap = n // 2 while …

    算法与数据结构 2023年5月19日
    00
  • C语言快速排序函数用法(qsort)

    C语言快速排序函数用法(qsort) 简介 快速排序是一种常见的排序算法,而C语言中的qsort函数则是一种快速排序的实现。使用qsort函数,我们无需自己编写快速排序算法的代码,只需要提供一个排序所需的比较函数即可。使用qsort函数,既可以方便的排序数组,还可以排序链表等数据结构。 函数原型 void qsort(void *base, size_t n…

    算法与数据结构 2023年5月19日
    00
  • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    STL常用算法介绍 STL(Standard Template Library)是C++标准库的一个庞大组成部分,提供了大量的常用算法,容器以及迭代器等等。这些工具都可以被拿来用来解决大部分的计算问题。其中stl常用算法主要包括排序算法和非变序型队列,下面进行详细讲解。 stl排序算法 STL提供了丰富的排序算法模板,可以直接拿来使用,无需重新实现。以下是一…

    算法与数据结构 2023年5月19日
    00
  • Js Snowflake(雪花算法)生成随机ID的实现方法

    Js Snowflake(雪花算法)生成随机ID的实现方法 介绍 雪花算法是Twitter开源的一种简单高效、生成唯一ID的算法,可以用于解决数据分布式系统中的ID生成器。本文将介绍使用Js实现雪花算法生成随机ID的完整方法。 实现 引入 首先,我们需要引入雪花算法的js库文件snowflake.js,并在页面中引入 <script src=&quot…

    算法与数据结构 2023年5月19日
    00
  • js算法中的排序、数组去重详细概述

    JS算法中的排序、数组去重详细概述 排序算法 在JavaScript中,常用的排序算法有冒泡排序、插入排序、选择排序、快速排序等。下面将分别对他们进行介绍。 冒泡排序 冒泡排序是一种稳定的排序算法,它的基本思想是从左到右依次比较相邻两个元素的大小,并且将较大的元素向右移动,较小的元素向左移动。重复这个过程直到没有任何元素需要移动为止。 下面是冒泡排序的Jav…

    算法与数据结构 2023年5月19日
    00
  • JS实现随机化快速排序的实例代码

    下面是JS实现随机化快速排序的完整攻略。 什么是随机化快速排序 随机化快速排序是一个常用的排序算法,它能够在 $O(n \log n)$ 的时间复杂度下对一个数组进行排序。该算法的实现非常高效,因为它使用了分治的思想,并且使用的是原地排序,即不需要额外的存储空间。随机化快速排序的核心是分区(partition)操作,该操作能够将一个数组分成两个部分,一部分是…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部