C语言实现快速排序算法实例

下面是“C语言实现快速排序算法实例”的完整攻略:

快速排序算法简介

快速排序是一种高效的排序算法,属于比较排序中的一种,采用分治策略,通过将原序列划分为若干个子序列依次排序,最终得到有序序列。该算法的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2),因此在实际应用中要根据数据规模和数据分布情况选择合适的算法。

C语言快速排序实现示例

下面我们通过C语言实现快速排序算法,具体思路如下:

  1. 以序列中第一个元素为基准值,将序列划分为左右两个子序列;
  2. 对左右子序列分别进行快速排序,直到子序列长度小于等于1;
  3. 将子序列重新合并。
void quick_sort(int arr[], int left, int right) {
    if (left >= right) return;  // 子序列长度小于等于1,直接返回
    int pivot = arr[left];  // 以第一个元素为基准值
    int i = left, j = right;
    while (i < j) {
        while (i < j && arr[j] >= pivot) j--;  // 从右往左扫描,找到第一个小于pivot的元素
        arr[i] = arr[j];  // 将小于pivot的元素移动到序列左边
        while (i < j && arr[i] <= pivot) i++;  // 从左往右扫描,找到第一个大于pivot的元素
        arr[j] = arr[i];  // 将大于pivot的元素移动到序列右边
    }
    arr[i] = pivot;  // 将基准值归位    
    quick_sort(arr, left, i - 1);  // 对左子序列进行快速排序
    quick_sort(arr, i + 1, right);  // 对右子序列进行快速排序
}

我们可以使用以下示例来测试快速排序的效果:

#include <stdio.h>

void quick_sort(int arr[], int left, int right);

int main() {
    int arr[] = {5, 3, 8, 4, 2, 9, 1, 6, 7};
    int n = sizeof(arr) / sizeof(int);
    quick_sort(arr, 0, n - 1);
    printf("排序后的结果为:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

输出结果为:1 2 3 4 5 6 7 8 9,满足我们的预期。

优化快速排序算法

快速排序的时间复杂度与待排序序列中选取的基准值有关,因此选取合适的基准值可以提高算法的效率。以下是选取三数中值作为基准值的示例代码:

void quick_sort(int arr[], int left, int right) {
    if (left >= right) return;

    // 选取三数中值作为基准值
    int mid = left + (right - left) / 2;  // 计算序列中间位置
    if (arr[left] > arr[right]) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
    }
    if (arr[mid] > arr[right]) {
        int temp = arr[mid];
        arr[mid] = arr[right];
        arr[right] = temp;
    }
    if (arr[left] < arr[mid]) {
        int temp = arr[left];
        arr[left] = arr[mid];
        arr[mid] = temp;
    }

    int pivot = arr[left];
    int i = left, j = right;
    while (i < j) {
        while (i < j && arr[j] >= pivot) j--;
        arr[i] = arr[j];
        while (i < j && arr[i] <= pivot) i++;
        arr[j] = arr[i];
    }
    arr[i] = pivot;
    quick_sort(arr, left, i - 1);
    quick_sort(arr, i + 1, right);
}

我们使用以下示例测试优化后的快速排序算法:

#include <stdio.h>

void quick_sort(int arr[], int left, int right);

int main() {
    int arr[] = {5, 3, 8, 4, 2, 9, 1, 6, 7, 0};
    int n = sizeof(arr) / sizeof(int);
    quick_sort(arr, 0, n - 1);
    printf("排序后的结果为:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

输出结果为:0 1 2 3 4 5 6 7 8 9,也满足我们的预期。

以上是对“C语言实现快速排序算法实例”的详细讲解和示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现快速排序算法实例 - Python技术站

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

相关文章

  • PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解

    PHP是一门广泛应用于Web开发领域的脚本语言,而算法在计算机科学领域也是非常重要的一部分,掌握一些常用的算法能够为程序员的工作带来极大的便利。本文将详细讲解PHP冒泡排序、二分查找、顺序查找、二维数组排序算法函数的详解。 冒泡排序 冒泡排序是一种比较简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就将它们交换,直到没有任何一对…

    算法与数据结构 2023年5月19日
    00
  • JS实现的计数排序与基数排序算法示例

    可能需要先说明一下,计数排序和基数排序都是针对整数排序的算法。 1. 计数排序 计数排序的基本思想是将每个元素出现的次数统计出来,并按顺序排列。计数排序不是基于元素比较的,而是建立在元素的值域范围较小的前提下的。因此,计数排序的时间复杂度是O(n+k),其中k是元素的值域大小。 算法步骤 统计每个数字出现的次数,得到一个长度为k的计数数组。 将计数数组进行变…

    算法与数据结构 2023年5月19日
    00
  • 排序算法图解之Java插入排序

    首先要了解什么是插入排序,插入排序是排序算法中简单直观的一种,其原理是将未排序的元素一个一个插入到已经排好序的元素中,最终得到一个有序的序列。那么下面我将用Java代码来演示插入排序的实现过程,并且提供详细的注释帮助读者理解。 算法步骤 从第一个元素开始,认为第一个元素是已经排好序的,取第二个元素和已排序的元素进行比较,如果第二个元素比已排序的元素小,则交换…

    算法与数据结构 2023年5月19日
    00
  • GO语言中常见的排序算法使用示例

    首先感谢你对“GO语言中常见的排序算法使用示例”的关注,下面是一个完整的攻略: GO语言中常见的排序算法 在GO语言中,常见的排序算法包括:冒泡排序、插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序等。这些排序算法的具体实现方式有所不同,但都可以在GO语言的标准库中找到相应的方法。 冒泡排序 冒泡排序的基本思路是比较相邻的两个元素,如果它们的顺序错误…

    算法与数据结构 2023年5月19日
    00
  • JS中的算法与数据结构之列表(List)实例详解

    首先,列表(List)是一种非常常见且重要的数据结构,用于存储一组顺序排列的数据。在JavaScript中,可以通过数组来实现列表。 具体来说,我们可能会涉及到一些常用的列表操作,例如: 在数组尾部添加一个元素 在数组特定位置插入一个元素 从数组中删除指定元素 获取数组中指定位置的元素 下面,我们将结合代码示例,一一介绍这些操作: 在数组尾部添加一个元素 在…

    算法与数据结构 2023年5月19日
    00
  • C语言冒泡排序算法代码详解

    下面是“C语言冒泡排序算法代码详解”的完整攻略: 1. 冒泡排序算法原理 冒泡排序是一种基础的排序算法,其基本思想是将待排序的数组中的相邻元素两两比较,如果前面的元素大于后面的元素,则交换它们的位置,直到比较完所有元素。这样一轮比较交换之后,最大(或最小)的元素会被放到最后(或最前),然后再对剩下的元素重复以上步骤,直到所有元素都排好序为止。 2. 冒泡排序…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解 冒泡排序概述 冒泡排序是一种基本的排序算法,它的基本思想是比较相邻的两个元素,如果前一个元素比后一个元素大,就交换这两个元素,重复进行这个过程,直到没有任何一对元素需要比较为止。冒泡排序得名于通过交换相邻的元素来把最大值“冒泡”到数列的尽头。 冒泡排序的时间复杂度为O(n²),效率较低,但其思想…

    算法与数据结构 2023年5月19日
    00
  • PHP实现常见排序算法的示例代码

    让我来为你详细讲解“PHP实现常见排序算法的示例代码”的完整攻略。 什么是排序算法 排序算法是计算机科学中的基础算法之一,它将一组对象按照特定的顺序排列。排序算法一般都是以数字为例子,但是排序算法同样适用于字符串、日期、结构体等各种类型的数据。 常见的排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这里我们将为大家介绍冒泡排序…

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