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日

相关文章

  • 简单掌握桶排序算法及C++版的代码实现

    简单掌握桶排序算法及C++版的代码实现 什么是桶排序? 桶排序(Bucket Sort)是一种常见的排序算法,它将数组中的元素分组至有限数量的桶中。每一个桶都可以视为一小部分数据的集合。根据桶内的元素所构成的数据的大小关系,可以在每个桶内部再分别使用其他排序算法或者递归地进行桶排序。最后,所有的桶按照顺序依次输出,即可得到有序序列。 桶排序算法的时间复杂度 …

    算法与数据结构 2023年5月19日
    00
  • C/C++实现双路快速排序算法原理

    作为网站的作者,我很愿意为大家详细介绍C/C++实现双路快速排序算法原理。下面是详细的攻略,分为以下几个部分: 1. 什么是双路快排算法 双路快排(Dual-Pivot Quick Sort)算法是一种高效的排序算法。该算法是快速排序(Quick Sort)的一种改进。 双路快排算法的基本思想是:选取两个基准值(pivot)来进行排序,将数组划分为三部分:小…

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

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

    算法与数据结构 2023年5月19日
    00
  • 详解C++实现链表的排序算法

    详解C++实现链表的排序算法 算法介绍 链表是一种常见的数据结构,在实际使用中常常需要对链表进行排序。本文将介绍在C++中实现链表排序的几种算法,包括插入排序,归并排序和快速排序。 插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法。具体实现过程如下: 遍历链表,取下一个节点作为插入节点。 如果当前节点不小于插入节点,则将插入节点插入…

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

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

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

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

    算法与数据结构 2023年5月19日
    00
  • C#算法之全排列递归算法实例讲解

    C#算法之全排列递归算法实例讲解 什么是全排列? 全排列是指将一个给定的集合中的元素进行排列,使得每个元素只出现一次,且每个元素在排列中的位置是不确定的,从而得到的所有不同排列。比如给定集合{1, 2, 3}的全排列包括{1, 2, 3}、{1, 3, 2}、{2, 1, 3}、{2, 3, 1}、{3, 1, 2}和{3, 2, 1}。 递归算法实现全排列…

    算法与数据结构 2023年5月19日
    00
  • 几种经典排序算法的JS实现方法

    一、冒泡排序 原理 冒泡排序将待排序元素两两比较,根据比较结果交换位置,一遍冒泡会让至少一个元素到达最终位置。重复这个过程,直到排序完成。 JS实现 function bubbleSort(arr) { const len = arr.length; for (let i = 0; i < len; i++) { for (let j = 0; j &…

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