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日

相关文章

  • JavaScript算法面试题

    JavaScript算法面试题攻略 1. 理解算法 在准备 JavaScript 算法面试前,需要先了解什么是算法。算法是指解决问题的一系列步骤,常用于解决复杂的问题,在计算机科学中有非常重要的应用。 2. 熟悉常见数据结构 准备算法面试的重点是熟悉常见数据结构。这些数据结构包括数组、链表、栈、队列、堆、散列表等。 3. 学习算法题的分类 在解决算法问题之前…

    算法与数据结构 2023年5月19日
    00
  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

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

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

    算法与数据结构 2023年5月19日
    00
  • PHP快速排序quicksort实例详解

    PHP快速排序quicksort实例详解 本文将详细介绍如何使用PHP实现快速排序算法,并提供两个示例进行说明。 基本思路 快速排序是一种比较常见的排序算法,其基本思路是通过递归将待排序数组分割成更小的子数组,并把比基准值小的元素一次放到基准值左边,比基准值大的元素一次放到基准值右边,然后对左右两边分别递归执行上述操作,直到分割成的子数组长度为1,此时由于子…

    算法与数据结构 2023年5月19日
    00
  • C语言实现排序算法之归并排序详解

    C语言实现排序算法之归并排序详解 概述 归并排序是一种分治算法,在处理大规模数据排序时具有较高的效率。该算法将要排序的数组分为两部分,对每个部分内部进行排序,然后将排好序的两部分合并成一个有序数组。该算法在实现时需要借助递归和迭代两种方式。 步骤 归并排序可递归或迭代实现。以下是递归实现的步骤: 分解:将待排序数组分为两个等长的子数组,分别为左半部分和右半部…

    算法与数据结构 2023年5月19日
    00
  • java ArrayList按照同一属性进行分组

    要按照同一属性进行分组,我们需要用到Java中的Collections类和Comparator接口。 首先,我们需要为ArrayList中的对象定义一个属性,以便按照该属性进行分组。例如,我们定义一个Person类,其中包含name和age两个属性,我们想要按照年龄进行分组。则代码如下: public class Person { private Strin…

    算法与数据结构 2023年5月19日
    00
  • Python中利用sorted()函数排序的简单教程

    下面是我为您准备的Python中利用sorted()函数排序的简单教程。 1. sorted()函数的简介 sorted()函数是Python内置函数之一,用于对一个可迭代对象进行排序操作。这个函数返回一个新的列表,而不会修改原来的列表本身。 sorted()函数的基本语法如下所示: sorted(iterable, key=None, reverse=Fa…

    算法与数据结构 2023年5月19日
    00
  • C++递归实现选择排序算法

    实现选择排序算法的递归版本,步骤如下: 步骤1:找到最小值 首先,在要排序的数组中找到最小值,这个过程可以用for循环来实现。具体实现如下: // 找到数组中最小值的下标 int findMinIndex(int arr[], int startIndex, int endIndex) { int minIndex = startIndex; for (in…

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