首页 > 其他分享 >快速排序及C语言实现

快速排序及C语言实现

时间:2023-06-19 21:00:45浏览次数:40  
标签:arr int C语言 算法 low 序列 排序 快速

快速排序算法是一种基于“分治思想”的高效排序算法,其原理是将一个可排序序列按照某个基准数划分成两个子序列,其中左边的子序列所有元素均小于等于基准数,右边的子序列所有元素均大于等于基准数,再对左右子序列分别递归执行同样的操作,直到整个序列有序为止。

以下是快速排序的 C 语言实现:

void swap(int* a, int* b) {
    int t = *a;
    *a = *b;
    *b = t;
}

int partition(int arr[], int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j <= high - 1; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return i + 1;
}

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

以上代码中,swap 函数用于交换两个数的值,partition 函数则是选择一个基准数(这里选择最后一个元素)将数组划分成左右两部分,并返回基准数所在的位置。quickSort 函数用于对整个序列进行递归排序。

示例:

#include <stdio.h>

void swap(int* a, int* b);
int partition(int arr[], int low, int high);
void quickSort(int arr[], int low, int high);

int main() {
    int arr[] = {4, 2, 7, 5, 1, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    quickSort(arr, 0, n - 1);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

输出结果为:

1 2 3 4 5 7

快速排序算法的时间复杂度最好情况下为 O(nlog2n),最坏情况下为 O(n2),平均情况下为 O(nlog2n),并且它是一种原地排序算法,空间复杂度为 O(1)。

快速排序算法具有排序速度快、空间复杂度低等优点,是一种非常优秀的排序算法。但是,它也有一些缺点,例如在极端情况下,如当待排序的序列已经有序时,快排算法的时间复杂度会退化到 O(n2),而且快排算法是非稳定排序算法,在两个相等的元素之间的顺序可能会被打乱。

标签:arr,int,C语言,算法,low,序列,排序,快速
From: https://blog.51cto.com/u_15903730/6517437

相关文章

  • 前端学习C语言 - 函数和关键字
    函数和关键字本篇主要介绍:自定义函数、宏函数、字符串处理函数和关键字。自定义函数基本用法实现一个add()函数。请看示例:#include<stdio.h>//自定义函数,用于计算两个整数的和intadd(inta,intb){//a,b叫形参intsum=a+b;returnsum;}intma......
  • 内网、外网和DMZ的防火墙保护程度排序和辨析
    标题:内网、外网和DMZ的防火墙保护程度排序及举例说明引言在网络安全中,防火墙是一种重要的安全设备,用于保护网络免受未经授权的访问和攻击。防火墙通常根据网络的布局和安全需求,将网络划分为内网、外网和DMZ(区域)三个区域,并为每个区域提供不同程度的保护。本文将按照受保护程度从......
  • c语言的delete函数
    很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的。一部分人还是将:malloc当作系统所提供的或者是C的关键字,事实上:malloc只是C标准库中提供的一个普通函数1,关于malloc以及相关的几个函数#include(Linux下)......
  • 搜索旋转排序数组
    33.搜索旋转排序数组题目描述题解为了设计一个复杂度为\(O(logn)\)的算法,可以采用二分的思想,但是题给数组只是一个部分有序的数组,更准确一点,应该是两个有序数组拼接而成的部分有序数组,唯一出现乱序的地方就是两个数组的拼接处。为了使用二分查找算法,我们必须确定中位点mid位......
  • linux C语言 使用socket获取本机所有IP地址
    #include<stdio.h>#include<sys/ioctl.h>#include<net/if.h>#include<arpa/inet.h>/******************************************************函数功能:获取本机所有ip地址。*输入参数:*max_ip_num:ip_buf能存的最多ip个数;*输出参数:*ip_b......
  • 自学C语言 2023_6_19
    变量,常量:变量——能被改变的量常量——不能改变的量定义变量的方法:inta=150;floatb=45.5f;charc='w';变量   变量的分类:局部变量——在打括号内的变量为局部变量全局变量——在大括号外的是全局变量例:inta=100;intmain(){inta=10;printf("%d\n",a);ret......
  • Python中的DYNAMIXEL快速入门指南
    原文链接:https://www.youtube.com/watch?v=LAizFTTdL8o hisvideowillbecoveringtherequiredcomponentsandhardware&softwaresetup,andfinallyruntheDYNAMIXELinPythonwithDYNAMIXELSDKwithinjustafewMINUTES. 本视频将涵盖所需的组件和硬件、软......
  • 数据结构课程设计2023夏7-11 二路归并排序
    给定一个整数序列,请按非递减序输出采用二路归并排序(递归法)的各趟排序后的结果(每完成一次归并操作就输出归并后的结果)。输入格式:测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。输出格式:对于每组测试,输出若干行,每行是一趟排序后的......
  • [转] git命令快速查询 -- 文字版
    一、新建代码库#在当前目录新建一个Git代码库$gitinit#新建一个目录,将其初始化为Git代码库$gitinit[project-name]#下载一个项目和它的整个代码历史$gitclone[url]二、配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下......
  • 武汉星起航:高效推广新品—快速提升新品的自然排名
    在亚马逊上推出新产品后,想要提高产品的曝光和销量,自然排名起着至关重要的作用。以下是武汉星起航整理的一些方法,可以帮助您提升新品的自然排名:关键词优化:在产品标题、描述和关键字字段中优化关键词。选择与产品相关且具有较高搜索量的关键词,并合理地插入到产品信息中。确保关键词......