c语言快速排序算法示例代码分享

首先,我们需要了解什么是快速排序。快速排序(QuickSort)是一种排序算法,其采用了分治的思想,并使用递归的方式处理数据集合。它的基本思想是从待排序的数据集合中选择一个元素作为分界点(一般称为pivot),然后将小于pivot的元素放到pivot左边,大于pivot的元素放到pivot右边,最后将pivot放到中间位置。然后递归处理pivot左右两边的子数组,直到所有的元素都被遍历过为止。

下面我们来看一下C语言的快速排序示例代码:

#include <stdio.h>

//定义快速排序函数
void quickSort(int arr[], int low, int high) {
    int i, j, temp, pivot;
    if (low < high) {
        pivot = low;
        i = low;
        j = high;
        while (i < j) {
            //从右边开始找到第一个小于pivot的元素
            while (arr[j] > arr[pivot]) {
                j--;
            }
            //从左边开始找到第一个大于pivot的元素
            while (i < j && arr[i] <= arr[pivot]) {
                i++;
            }
            //交换i和j位置的元素
            if (i < j) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        //将pivot移到中间位置
        temp = arr[pivot];
        arr[pivot] = arr[j];
        arr[j] = temp;
        //递归处理pivot左右两边的子数组
        quickSort(arr, low, j - 1);
        quickSort(arr, j + 1, high);
    }
}

//测试代码
int main() {
    int arr[] = { 5, 1, 9, 3, 7, 4, 8, 6, 2 };
    int len = sizeof(arr) / sizeof(*arr);
    printf("Original array: ");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    quickSort(arr, 0, len - 1);
    printf("Sorted array: ");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

该示例代码中,我们自定义了一个快速排序函数quickSort(),传入数组arr、数组最小索引值low、数组最大索引值high三个参数,用于处理待排序的数组。

在函数内部,我们首先判断low是否小于high,如果是,则进行一些操作。接着定义pivot作为我们选择的分界点,ij分别代表数组左右两个指针位置,开始从arr[low]作为pivot,然后我们从右边开始找到第一个小于pivot的元素,从左边开始找到第一个大于pivot的元素,然后交换ij位置的元素,直到ij相遇。最后将pivot移到中间位置,并递归处理pivot左右两边的子数组。

我们在main()函数中调用了quickSort()函数来实现排序。在测试代码中,我们定义了一个整型数组arr,并打印了原始顺序的数组arr,随后调用quickSort()函数对该数组进行排序,并打印排序后的结果。

下面我们来看看快速排序的算法复杂度:

最优情况下,时间复杂度为O(nlogn)。

最坏情况下,时间复杂度为O(n^2)。

平均情况下,时间复杂度为O(nlogn)。

下面我将会给出另一条示例:

#include<stdio.h>

//定义快速排序函数
void quickSort(int arr[], int left, int right) {
    if (left<right){
        int i = left, j = right, pivot = arr[left];
        while (i<j)
        {
            while (i<j&&arr[j]>=pivot)j--;//从右向左找第一个小于x的数  
            if (i<j)
            arr[i++] = arr[j];
            while (i<j&&arr[i]<pivot)i++;//从左向右找第一个大于等于x的数  
            if (i<j)
            arr[j--] = arr[i];
        }
        arr[i] = pivot;
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

//测试代码
int main(){
    int arr[] = { 6,1,2,7,9,3,4,5,10,8 };
    int len = sizeof(arr) / sizeof(*arr);
    printf("Original array:");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    quickSort(arr, 0, len - 1);
    printf("Sorted array:");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

该示例与上一条示例代码类似,同样是通过一次扫描数组递归处理的方式进行排序。但是该示例对于右端点元素的选择略有不同,这次我们选择了数组的最左端点元素为枢轴。又在交换元素时进行了优化。

属于一种更灵活的实现方式。

我们可通过执行该示例代码来检验一下结果是否与预期相符。

以上就是C语言快速排序算法示例代码的分享内容,希望能够帮助到大家。

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

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

相关文章

  • JavaScript实现的七种排序算法总结(推荐!)

    JavaScript实现的七种排序算法总结(推荐!) 简介 本文介绍了JavaScript实现的七种排序算法,包括插入排序、冒泡排序、选择排序、希尔排序、归并排序、快速排序和堆排序。每种算法都有对应的JavaScript代码实现,并且详细说明了算法的原理、时间复杂度和代码实现过程。 插入排序 插入排序是一种简单的排序算法,它的基本思想是将数组分成已排序和未排…

    算法与数据结构 2023年5月19日
    00
  • PHP抽奖算法程序代码分享

    关于“PHP抽奖算法程序代码分享”的完整攻略,我将会从以下方面进行讲解: 什么是抽奖算法? 如何设计抽奖算法? 实现代码分享及示例说明 什么是抽奖算法? 抽奖算法是指通过一定的算法,实现在一些参与者中选出一个或几个”幸运儿”的过程。 如何设计抽奖算法? 抽奖算法设计的主要目的就是为了确保公平,同时符合某些要求。在比较公平的情况下,抽奖过程也应该是越来越具备娱…

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

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

    算法与数据结构 2023年5月19日
    00
  • PHP常用的排序和查找算法

    PHP常用的排序和查找算法 排序算法 冒泡排序 冒泡排序是一种简单的排序算法。 它多次遍历要排序的列表,每次比较相邻的两项,如果它们的顺序错误就把它们交换过来。 示例代码如下: function bubble_sort($arr) { $len = count($arr); for($i=1; $i<$len; $i++) { for($j=0; $j…

    算法与数据结构 2023年5月19日
    00
  • 深入学习C语言中常见的八大排序

    深入学习C语言中常见的八大排序 前言 排序算法是计算机科学中的基本问题之一,是计算机领域内经典且常见的算法问题之一。排序算法对于优化数据检索、数据压缩、数据库查询效率等方面都有着重要的意义。本文将为您详细讲解常见的八种排序算法的原理、时间复杂度以及应用场景,希望能够对您学习和了解排序算法提供帮助。 简介 排序算法是将一串数据按照一定的规则进行排列,排序算法可…

    算法与数据结构 2023年5月19日
    00
  • c语言冒泡排序和选择排序的使用代码

    下面是冒泡排序和选择排序的使用代码攻略。 冒泡排序和选择排序的使用代码 在C语言中,冒泡排序和选择排序都是经典的排序算法。本文将分别介绍它们的使用代码,以供参考。 冒泡排序 冒泡排序的基本思路是,相邻的元素两两比较,大的往后移,小的往前移,最终实现升序或降序排列的算法。 下面是一个简单的C语言冒泡排序的代码示例: #include <stdio.h&g…

    算法与数据结构 2023年5月19日
    00
  • php通过ksort()函数给关联数组按照键排序的方法

    如果需要将PHP关联数组按照键进行排序,可以使用ksort()函数。以下是使用ksort()函数给关联数组按照键排序的完整攻略: 第一步:创建一个关联数组 首先,创建一个包含多个元素的关联数组,这些元素都是键/值对。 $assoc_array = array( "name" => "John", "ag…

    算法与数据结构 2023年5月19日
    00
  • C++中sort函数的基础入门使用教程

    以下是详细讲解“C++中sort函数的基础入门使用教程”的完整攻略及两条示例说明。 C++中sort函数的基础入门使用教程 简介 sort函数是C++ STL中的一个快速排序函数,我们可以用它对数组或容器进行排序。 基本使用 sort函数的一般形式如下: #include <algorithm> sort(first, last, cmp); 其…

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