用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日

相关文章

  • Golang算法问题之数组按指定规则排序的方法分析

    下面是“Golang算法问题之数组按指定规则排序的方法分析”的完整攻略: 前言 数组排序是算法问题的一个经典案例,今天将介绍如何使用 Go 语言对数组按照指定规则排序的方法。 算法分析 冒泡排序 冒泡排序是一种非常经典的排序算法,其基本思想是重复地走访过要排序的元素列,每次比较相邻的两个元素,如果它们的顺序错误就交换它们的位置。具体实现方式如下: func …

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

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

    算法与数据结构 2023年5月19日
    00
  • JavaScript数组基于交换的排序示例【冒泡排序】

    下面是JavaScript数组基于交换的排序示例【冒泡排序】的完整攻略: 冒泡排序 冒泡排序是最基本的排序算法之一,它的原理是通过比较相邻的元素,将较大的元素交换到右侧,较小的元素交换到左侧,最终将整个数组按照升序排列。 下面是一份基于交换的冒泡排序代码,我们通过代码中加入注释来讲解冒泡排序的实现过程: function bubbleSort(arr) { …

    算法与数据结构 2023年5月19日
    00
  • 基于python进行桶排序与基数排序的总结

    基于python进行桶排序与基数排序的总结 桶排序 桶排序是一种稳定的排序算法,利用预先定义的桶按照一定的映射关系将待排序的元素分配到不同的桶中,并对每个桶中的元素进行排序,最后将所有桶中的结果合并起来即可。 具体的步骤如下: 找出待排序数组中的最大值max和最小值min,确定所需桶的数量,建立一个包含顺序桶的桶(列表)bucket和一个空列表result。…

    算法与数据结构 2023年5月19日
    00
  • c++中八大排序算法

    c++中八大排序算法 本文介绍的是C++中八大排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、希尔排序、归并排序、堆排序和计数排序。下面将对这八种算法进行详细讲解。 冒泡排序 冒泡排序(Bubble Sort),是一种简单的排序算法。它重复地遍历要排序的列表,比较每对相邻的项,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复地进行知道没有再需…

    算法与数据结构 2023年5月19日
    00
  • c语言实现基数排序解析及代码示例

    c语言实现基数排序解析及代码示例 前言 基数排序是一种特殊的排序算法,它的时间复杂度为O(dn),其中d表示数据位数,n表示数据个数。它可以用于排序整数、字符串、链表等数据类型。本篇攻略通过讲解基数排序的原理、流程和C语言实现,希望能够帮助大家更好地理解和应用基数排序算法。 基数排序原理 基数排序是一种非比较排序算法,它的实现基于按照键值的每位数字对待排序数…

    算法与数据结构 2023年5月19日
    00
  • Trie树_字典树(字符串排序)简介及实现

    接下来我将详细讲解“Trie树_字典树(字符串排序)简介及实现”的完整攻略。 什么是 Trie 树? Trie 树,也叫字典树,是一种树形数据结构,用于处理字符串匹配、排序等问题。它的特点是能够快速地查找特定前缀或后缀的字符串。 Trie 树的基本实现 Trie 树通常是一棵多叉树,其中根节点不包含任何字符,每个子节点包含一个字符,组成一个完整的字符串。下面…

    算法与数据结构 2023年5月19日
    00
  • php实现快速排序的三种方法分享

    那么现在我将为您介绍“php实现快速排序的三种方法分享”的完整攻略。 什么是快速排序 快速排序(Quick Sort)通常被认为是对冒泡排序的一种改进。在冒泡排序中,需要进行多次的数据比较和交换操作,而快速排序与其不同之处在于它通过一个基准值将待排序的数组分成两个部分。在计算机领域,快速排序是一种常见的排序算法。 快速排序的常规实现思路 快速排序的常规实现思…

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