C语言实现快速排序算法

C语言实现快速排序算法攻略

什么是快速排序算法

快速排序算法是一种常用的排序算法, 它使用递归的方式不断地将待排序序列分为两个部分,直到每个子序列中只有一个元素,最终合并完成整个序列的排序。

步骤

快速排序算法的步骤如下:

  1. 从序列中选取一个基准元素
  2. 将所有小于基准元素的元素放到基准元素左边,大于基准元素的元素放到基准元素右边
  3. 对基准元素左右两个子序列分别执行上述两个步骤,直到每个子序列中只有一个元素

代码实现

以下是C语言实现快速排序算法的代码

void quicksort(int a[], int left, int right){
    int i, j, t, pivot;

    if(left < right){
        pivot = a[left];
        i = left;
        j = right;
        while(i < j){
            while(i < j && a[j] > pivot)
                j--;
            if(i < j){
                t = a[i];
                a[i] = a[j];
                a[j] = t;
                i++;
            }
            while(i < j && a[i] < pivot)
                i++;
           if(i < j){
               t = a[i];
               a[i] = a[j];
               a[j] = t;
               j--;
           }
        }
        a[i] = pivot;
        quicksort(a, left, i - 1);
        quicksort(a, i + 1, right);
    }
}

示例说明

假设有以下待排序数组

int a[] = {3, 7, 2, 9, 1, 4, 6, 8, 5};
  1. 选取基准元素为a[0], 即3
  2. 将小于3的数放到左边,大于3的数放到右边, 得到以下序列
{2, 1, 3, 9, 7, 4, 6, 8, 5}
  1. 分别对左右两个子序列执行上述两个步骤, 直到每个子序列中只有一个元素, 序列变为
{1, 2, 3, 4, 5, 6, 7, 8, 9}

另外,下面是利用快速排序算法实现搜索一个未排序数组中第k大的元素的示例代码

int find_kth_largest(int a[], int len, int k){
    int left = 0, right = len - 1;
    int i, t, pivot;

    while(left <= right){
        pivot = a[left];
        i = left;
        for(int j = left + 1; j <= right; j++){
            if(a[j] > pivot){
                i++;
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        t = a[i];
        a[i] = a[left];
        a[left] = t;

        if(i == k - 1)
            return a[i];
        else if(i < k - 1)
            left = i + 1;
        else
            right = i - 1;
    }
    return -1;
}

可以通过以下方式调用函数

int a[] = {3, 7, 2, 9, 1, 4, 6, 8, 5};
int len = sizeof(a)/sizeof(a[0]);
int k = 4;
int kth_largest = find_kth_largest(a, len, k);
printf("第%d大元素是%d\n", k, kth_largest);

假设k = 4,输出应为

第4大元素是6

总结

快速排序算法是一个高效的排序算法,相信通过上述讲解,读者对它有了更深刻的理解。当然,快速排序也有一些局限性,例如,当待排序序列基本有序或逆序时,算法复杂度会退化为O(n^2),因此在应用时需要根据具体情况综合考虑。

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

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

相关文章

  • JS常用排序方法实例代码解析

    JS常用排序方法实例代码解析 在 JavaScript 中,有很多种排序方法可以使用。本文将介绍常用的四种排序方法及其实例代码,包括冒泡排序、选择排序、插入排序和快速排序。 冒泡排序 冒泡排序是一种简单、但效率低下的排序算法。基本思路是将相邻的两个数进行比较,如果前面的数比后面的数大,则交换这两个数的位置,一直重复这个过程,直到最后一个数是最大数为止。 fu…

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

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

    算法与数据结构 2023年5月19日
    00
  • C/C++实现八大排序算法汇总

    C/C++实现八大排序算法汇总 简介 本文旨在介绍常用的八大排序算法并用 C/C++ 语言实现。 八大排序算法包括: 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 选择排序(Selection Sort) 快速排序(Quick Sort) 归并排序(Merge Sort) 希尔排序(Shell Sort) 堆排序(Heap S…

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

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

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

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

    算法与数据结构 2023年5月19日
    00
  • C语言排序方法(冒泡,选择,插入,归并,快速)

    下面是关于C语言排序方法冒泡、选择、插入、归并、快速的详细攻略: 冒泡排序 冒泡排序是一种最简单的排序算法,它的核心思想是从左到右依次比较相邻的两个元素,如果前一个元素大于后一个元素,就交换它们的位置,这样一遍比较后,最大的元素就会被“冒泡”到最右边。然后再对剩余的元素重复同样的操作,这样一直迭代直到整个序列排序完成。 下面是标准的C语言冒泡排序代码示例: …

    算法与数据结构 2023年5月19日
    00
  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • 冒泡排序算法及Ruby版的简单实现

    冒泡排序是一种比较简单的排序算法,其基本思想是重复地遍历数列,每次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换这两个元素的位置,直到遍历完整个数列,这样一次遍历后,数列中最大的元素就被排到了最后面。重复执行此过程,直到整个数列有序为止。 以下是冒泡排序算法的Ruby版简单实现: def bubble_sort(array) n = array.l…

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