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日

相关文章

  • c#实现选择排序的示例

    C#实现选择排序主要包含以下步骤: 定义数组 遍历数组,选出最小元素,并记录其索引 交换当前索引和最小值索引的元素 循环执行步骤2和步骤3,直到整个数组排序完成 以下是实现选择排序的C#示例: 示例1: int[] arr = new int[]{5, 3, 9, 1, 7, 4}; for (int i = 0; i <arr.Length; i++…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法系列之直接选择排序详解

    PHP排序算法系列之直接选择排序详解 一、前言 本文将详细讲解直接选择排序,直接选择排序是一个简单但常用的排序算法,对初学者来说是个很好的入门算法,代码也比较易懂。 二、算法原理 直接选择排序,是一种比较简单直观的排序算法。其基本思想为:将待排序的序列划分为已排序和未排序两部分,从未排序的序列中选择最小的元素,将其插入已排序序列的末尾,直到所有元素均排序完毕…

    算法与数据结构 2023年5月19日
    00
  • C语言简明讲解快速排序的应用

    C语言简明讲解快速排序的应用 快速排序的概述 快速排序是一种基于比较的排序算法,最初由Tony Hoare于1959年发明,因其在实践中的高效性而受到广泛的应用。快速排序的基本思想是通过不断地分割(partition)和交换(swap)来实现排序,具体来说,就是先选取一个pivot数,然后将序列中小于pivot的数放在pivot左边,大于pivot的数放在p…

    算法与数据结构 2023年5月19日
    00
  • Python算法绘制特洛伊小行星群实现示例

    下面是“Python算法绘制特洛伊小行星群实现示例”的完整攻略,包含两个示例说明。 1. 安装所需库 在开始绘制特洛伊小行星群之前,首先需要安装所需的Python库,包括numpy、matplotlib和mpl_toolkits.mplot3d等。可以使用以下命令进行安装: pip install numpy pip install matplotlib p…

    算法与数据结构 2023年5月19日
    00
  • C++实现自顶向下的归并排序算法

    下面是“C++实现自顶向下的归并排序算法”的完整攻略。 归并排序的概念 归并排序是一种分治法排序算法,它将一个大数组分成两个部分,分别对这两个部分进行排序,最后将两个排好序的部分合并起来。归并排序的时间复杂度为O(n log n)。 归并排序的步骤 实现归并排序需要以下三个步骤: 分割 – 将数组分成两个部分,分别对每个部分进行排序。该过程使用二分法来实现。…

    算法与数据结构 2023年5月19日
    00
  • C语言 奇偶排序算法详解及实例代码

    C语言奇偶排序算法详解及实例代码 本篇文章将详细讲解C语言中奇偶排序算法的原理、实现方法及具体的实例代码,并通过两个示例说明其使用方法。 原理介绍 奇偶排序算法又叫交替排序算法,是一种简单但较慢的排序算法,通常用于小型数据集中的排序。该算法通过使用两个线程分别对奇数位置和偶数位置的元素进行比较和交换来实现排序。 该算法的原理如下: 从头到尾扫描一遍待排序数组…

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

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

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

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

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