用c语言实现冒泡排序,选择排序,快速排序

首先我们来讲一下三种基本的排序算法——冒泡排序、选择排序和快速排序,并且给出实现的具体代码。

冒泡排序

冒泡排序是一个非常简单的排序算法,其基本思想是比较相邻两个数的大小,如果前一个数比后一个数大,就将两个数交换位置。通过不断重复这个过程,将最大的数“冒泡”到数组的最后面,这个过程类似于水泡在水中不断冒上来,因此得其名。

具体的实现代码如下:

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

其中,参数 arr 表示待排序的数组,参数 n 表示数组的大小。我们使用两层循环来遍历所有的元素,对于相邻的两个元素进行比较,如果前一个元素大于后一个元素,则将这两个元素交换位置。

选择排序

选择排序是另一种简单的排序算法,其基本思想是将待排序数组分为已排序和未排序两部分,每次从未排序部分中选择最小的元素,将其加入到已排序部分的末尾。这个过程不断重复,直到所有元素都排序完毕。

具体的实现代码如下:

void selectionSort(int arr[], int n) {
    int i, j, min_idx;
    for (i = 0; i < n-1; i++) {
        min_idx = i;
        for (j = i+1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[min_idx];
        arr[min_idx] = temp;
    }
}

其中,参数 arrn 的含义与冒泡排序中相同。我们使用两层循环来遍历未排序部分的所有元素,每次选择未排序部分的最小值将其添加到已排序部分的末尾。

快速排序

快速排序是一种高效的排序算法,其基本思想是选择一个元素作为枢纽(pivot),将小于枢纽的元素放在左边,将大于枢纽的元素放在右边,然后对左右两个部分分别进行递归调用。最终得到的序列是有序的。

具体的实现代码如下:

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

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++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return (i+1);
}

其中,参数 arr 表示待排序的数组,参数 lowhigh 分别表示数组的起始和结束位置。我们使用递归的方式实现快速排序,首先选择一个元素作为枢纽,然后分别对左右两个部分进行递归排序。

这里也让我们来看两个示例说明,以方便理解。

示例1:

int arr[] = {5, 2, 9, 3, 7, 6, 8, 1, 4};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);

将数组 arr 定义为 {5, 2, 9, 3, 7, 6, 8, 1, 4},数组的大小为 n,然后使用冒泡排序算法对其进行排序。

示例2:

int arr[] = {5, 2, 9, 3, 7, 6, 8, 1, 4};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);

将数组 arr 定义为 {5, 2, 9, 3, 7, 6, 8, 1, 4},数组的大小为 n,然后使用快速排序算法对其进行排序。

以上就是三种常见的排序算法的实现方法,以及两条示例代码的说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用c语言实现冒泡排序,选择排序,快速排序 - Python技术站

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

相关文章

  • python 如何在list中找Topk的数值和索引

    对于如何在Python的list中找Topk的数值和索引,可以采用以下方法: 方法一:使用sorted函数排序 可以使用Python内置的sorted函数对list进行排序,然后取前k个元素,同时得到它们的索引。具体代码如下: lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] k = 3 # 记录每个元素的索引和值 lst_wi…

    算法与数据结构 2023年5月19日
    00
  • C语言算法练习之数组元素排序

    C语言算法练习之数组元素排序攻略 1. 题目描述 给定一个整数数组,要求将其元素按照从小到大排序,并输出排序后的结果。要求不使用C语言中内置的排序函数。 2. 解题思路 可以通过选择排序、冒泡排序和快速排序等多种算法来解决这个问题。在这里我们介绍一种比较简单易懂的冒泡排序算法。 冒泡排序算法的核心思想是将相邻两个元素进行比较,并将较小的元素移到前面,重复这个…

    算法与数据结构 2023年5月19日
    00
  • java简单选择排序实例

    Java简单选择排序是一种基于比较的排序算法,其基本思想是每次从待排序数据中选取最小(或最大)的元素,放到已排序的数据的末尾,直到所有元素都被排序完成。以下是Java简单选择排序实现的完整攻略: 算法步骤 遍历待排序的数组,每次选择最小的元素。 将已排序区间的末尾与最小元素进行交换。 扫描完整个数组,排序完成。 代码示例 下面给出了Java的简单选择排序的代…

    算法与数据结构 2023年5月19日
    00
  • 图解Java排序算法之快速排序的三数取中法

    图解Java排序算法之快速排序的三数取中法 什么是快速排序 快速排序是一种常见的排序方法,它的特点是在待排序的记录序列中,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分的记录关键字均比另一部分的关键字小。 快速排序的基本流程 快速排序的基本流程如下: 从数列中挑出一个元素,称为“基准”(pivot)。 对数列重新排序,将比基准值小的元素放在基准前面…

    算法与数据结构 2023年5月19日
    00
  • C语言深入探究直接插入排序与希尔排序使用案例讲解

    C语言深入探究直接插入排序与希尔排序使用案例讲解 直接插入排序 算法描述 直接插入排序的基本思想是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增加1的有序表。具体算法流程如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排…

    算法与数据结构 2023年5月19日
    00
  • 大数据情况下桶排序算法的运用与C++代码实现示例

    桶排序算法是一种基于计数的排序算法,它的主要思想是把一组数据分成多个桶,对每个桶中的数据进行排序,最后依次把每个桶中的数据合并起来,得到排序后的结果。在大数据情况下,桶排序算法可以大幅减少排序时间,因为它可以快速地将数据分成多个桶,进行并行排序,最终合并起来。 以下是桶排序算法在大数据情况下的运用及C++代码示例: 算法思路 先确定桶的数量,也就是需要将数据…

    算法与数据结构 2023年5月19日
    00
  • PHP实现常用排序算法的方法

    一、常用排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序等。 冒泡排序: 基本思想是每次比较相邻的两个元素,如果前者比后者大,则将它们交换位置,最终使得从左到右的每个元素都是当前序列中最小的。 选择排序: 基本思想是每次从未排序的数中选取最小的数,并将其放到已排序序列的末尾。 插入排序: 基本思想是从无序序列中取…

    算法与数据结构 2023年5月19日
    00
  • 可能是你看过最全的十大排序算法详解(完整版代码)

    针对“可能是你看过最全的十大排序算法详解(完整版代码)”这篇文章,下面是详细的攻略: 标题 首先,该文章的标题是:可能是你看过最全的十大排序算法详解(完整版代码) 文章简介 其次,在文章简介中,作者提到该篇文章是一个完整介绍了十大排序算法并且附有代码实现的文章,可以帮助读者了解这些排序算法的原理和代码实现。 内容 文章的主体部分是对十大排序算法进行详细的讲解…

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