C语言简单实现快速排序

C语言简单实现快速排序

什么是快速排序?

快速排序(Quicksort)是一种分治的排序算法,由Tony Hoare于1960年提出。快速排序使用两个指针i,j分别指向待排序数组的最左侧和最右侧,以一个值作为基准(pivot),一般为数组的中间值。快速排序的主要思路是将数组中小于基准值的数放到基准值左边,将大于基准值的数放到右边。然后通过递归的方式,对左右两个子数组分别进行排序,直到整个数组有序。

算法实现

以下是快速排序的一个简单实现:

void quick_sort(int arr[], int left, int right) {
    if(left >= right) return; // 当left >= right时,递归到底,返回
    int i = left, j = right, pivot = arr[(left + right) / 2]; // 初始化左右指针i,j,以及基准值pivot
    while(i <= j) { // 当i <= j时,执行以下循环体
        while(arr[i] < pivot) i++; // 从左边开始找比基准值大的数,找到则停止
        while(arr[j] > pivot) j--; // 从右边开始找比基准值小的数,找到则停止
        if(i <= j) { // 如果i <= j,则交换arr[i]和arr[j]的值
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    }
    quick_sort(arr, left, j); // 对左子数组进行递归排序
    quick_sort(arr, i, right); // 对右子数组进行递归排序
}

示例说明

以下是一个使用快速排序的示例:

#include <stdio.h>

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

int main() {
    int i, arr[10] = {5, 3, 7, 1, 2, 4, 9, 8, 6, 0};
    quick_sort(arr, 0, 9);
    for(i = 0; i < 10; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

void quick_sort(int arr[], int left, int right) {
    if(left >= right) return;
    int i = left, j = right, pivot = arr[(left + right) / 2];
    while(i <= j) {
        while(arr[i] < pivot) i++;
        while(arr[j] > pivot) j--;
        if(i <= j) {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    }
    quick_sort(arr, left, j);
    quick_sort(arr, i, right);
}

输出结果为:

0 1 2 3 4 5 6 7 8 9 

以下是另一个使用快速排序的示例:

#include <stdio.h>

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

int main() {
    int i, arr[5] = {5, 1, 3, 4, 2};
    quick_sort(arr, 0, 4);
    for(i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

void quick_sort(int arr[], int left, int right) {
    if(left >= right) return;
    int i = left, j = right, pivot = arr[(left + right) / 2];
    while(i <= j) {
        while(arr[i] < pivot) i++;
        while(arr[j] > pivot) j--;
        if(i <= j) {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    }
    quick_sort(arr, left, j);
    quick_sort(arr, i, right);
}

输出结果为:

1 2 3 4 5 

以上两个示例都展示了使用快速排序对一个整型数组进行升序排序的过程。当然,快速排序同样可以用于其他类型的数据,只需要更改排序函数的参数类型即可。

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

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

相关文章

  • 深入解析桶排序算法及Node.js上JavaScript的代码实现

    深入解析桶排序算法及Node.js上JavaScript的代码实现 桶排序算法介绍 桶排序算法是一种非常有效的排序方法,通常用于在已知数据范围的情况下对数据进行排序。桶排序将数据分配到一个或多个桶中,然后对每个桶中的数据进行排序,最后将所有桶中的数据依次合并即可得到有序的结果。 桶排序的时间复杂度为O(n),其中n为待排序的数据个数。如果数据范围较大,需要分…

    算法与数据结构 2023年5月19日
    00
  • C++实现广度优先搜索实例

    C++实现广度优先搜索实例攻略 什么是广度优先搜索? 广度优先搜索(Breadth-First Search,也称之为BFS)是一种基于图的搜索算法,用于访问位于某个特定顶点距离为K的所有顶点。它广泛应用于树和图的数据结构中。 BFS的过程如下: 从源节点开始遍历; 访问相邻的节点; 将相邻节点加入队列; 标记已访问的节点; 重复步骤2-4,直到队列为空。 …

    算法与数据结构 2023年5月19日
    00
  • 2020年新浪最新PHP试题和答案解析

    2020年新浪最新PHP试题和答案解析攻略 作为新浪最新的PHP试题,本门考试难度较高。以下是一些考试攻略以及答案解析。 试题分析 本次试题由多道选择题和编程题组成,主要考察PHP语言基础、框架使用、数据库操作等方面的知识。 选择题 本次选择题共15道,主要考察PHP基础语法、函数使用、面向对象编程、异常处理等方面的知识。 编程题 本次编程题共2道,主要考察…

    算法与数据结构 2023年5月19日
    00
  • PHP常见数组排序方法小结

    PHP常见数组排序方法小结 PHP的数组是一种非常有用的数据结构。当我们需要对数组进行排序时,PHP提供了许多常见的排序方法,包括冒泡排序、选择排序、插入排序、快速排序等,本文将对这些排序方法进行简要介绍和示例说明。 冒泡排序 冒泡排序是一种常见的排序方法,它的基本思想是:对相邻的元素进行比较,如果顺序不正确就交换。这个过程会持续到整个数组都有序为止。 fu…

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

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

    算法与数据结构 2023年5月19日
    00
  • C#中使用快速排序按文件创建时间将文件排序的源码

    下面就来详细讲解如何在C#中使用快速排序按文件创建时间将文件排序的源码攻略。 1. 快速排序原理 快速排序(Quick Sort)是一种基于分治法的高效排序算法,其主要思想是选择一个基准点(pivot),将数组分为左右两个子数组,将左边的数组的元素都小于基准点,右边的数组的元素都大于基准点,再递归对左右子数组进行快排操作,直到子数组长度为1或0。快速排序的时…

    算法与数据结构 2023年5月19日
    00
  • java如何给对象按照字符串属性进行排序

    在 Java 中,我们可以使用 Collections.sort() 方法对任意类型的对象进行排序。但是,如果我们想要按照对象的某一个字符串属性进行排序,我们可以使用 Comparator 接口来实现。 具体步骤如下: 首先,创建一个 Comparator 对象,重写 compare() 方法,按照需要的属性进行排序。例如,如果我们要按照对象的 name 属…

    算法与数据结构 2023年5月19日
    00
  • MySQL order by与group by查询优化实现详解

    MySQL的order by与group by是常用的查询优化手段,本篇攻略将详细讲解order by与group by的使用方法及其优化实现。 1. MySQL Order By MySQL Order By 用于对查询结果进行排序,将查询结果按照指定字段的顺序进行排列 ,默认升序排序,也可以指定为降序排序。 SELECT column1, column2…

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