c语言的快速排序,C语言实现快速排序法(分治法)

article/2025/11/8 5:05:00

title: 快速排序法(quick sort)

tags: 分治法(divide and conquer method)

grammar_cjkRuby: true

算法原理

分治法的基本思想:将原问题分解为若干个更小的与原问题相似的问题,然后递归解决各个子问题,最后再将各个子问题的解组合成原问题的解。

利用分治法可以将解决办法分为 “三步走” 战略:

(1) 在数据集中选定一个元素作为“基准”(pivot)

(2) 将所有数据集小于基准的元素放在基准左边,大于基准的元素放在基准右边,把原数据集分为两个数据集的操作叫做“分区”,分区结束后基准所在的位置也就是基准最后的位置

(3) 分别对基准左右两边的数据集进行前两个步骤,直至数据集只剩下一个数据为止

0688d0834ce7c8ef3dac90625b49439a.gif

C语言实现

/***********************/

//章节:第四章

//内容:快速排序

/***********************/

#include

#include

#include

#include

void fastsort(int v[], int first, int last);

int main()

{

int i, v[10] = {1,243,43,5,6,634,434,23,12,7};

fastsort( v, 0, 9);

for(i = 0; i < 10; i++)

printf("%d ",v[i]);

return 0;

}

void fastsort(int v[], int first, int last){

int i, storeindex;

void swap(int v[], int i, int j);

if(first >= last)

return; //fewer than two ele

swap(v, last, (first + last)/2); //move partition elem

storeindex = first;

for(i = first; i <= last-1; i++)

if(v[i] <= v[last])

{

swap(v, storeindex, i);

storeindex += 1;

}

swap(v, last, storeindex);

fastsort(v, first, storeindex - 1);

fastsort(v, storeindex + 1, last);

}

/*swap:interchange v[i] and v[j]*/

void swap(int v[], int i, int j){

int temp;

temp = v[j];

v[j] = v[i];

v[i] = temp;

}

实例分析

357a0fd3dd3f27edb04f37f7cf7377d9.png

(1)取5作为pivot,然后将其移动到最后一个位置

(2)从第一个数3到倒数第二个数5分别和pivot比较,如果小于等于pivot的数依次从前向后排

(4)将pivot 5移回两个分区中间

分治法——快速排序&lpar;quicksort&rpar;

先上代码 #include using namespace std; int partition(int a[],int low, int high) { int p ...

数据结构-栈(应用篇)之快速排序法-C和C&plus;&plus;的实现

一.原理解析 快速排序法: 基本思路是,从第一个元素开始,把所有比它大的元素放在它后面,把所有比它小的元素放前面.然后划分它前面和后面的所有元素,分别再做快速排序,直到无法再划分为止. 在以下程序案例 ...

python 实现分治法的几个例子

分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质. 3) 利用该问题分解出的子 ...

分治法及其python实现例子

在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

Leetcode Lect4 二叉树中的分治法与遍历法

在这一章节的学习中,我们将要学习一个数据结构——二叉树(Binary Tree),和基于二叉树上的搜索算法. 在二叉树的搜索中,我们主要使用了分治法(Divide Conquer)来解决大部分的问题. ...

Java算法——分治法

一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简 ...

javascript的快速排序法

在排序方式中,快速是比较普遍使用的,因为其速度快. 因为其是不断的递归,而且是根据基准点的左右两边开始递归,直到数组只有一个值的时候才返回. 这个基准点是自己定的. 一般取中间,比较好理解. < ...

分治法(一)&lpar;zt&rpar;

这篇文章将讨论: 1) 分治策略的思想和理论 2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性. 说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它 ...

用分治法解决最近点对问题&colon;python实现

最近点对问题:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小.需要说明的是理论上最近点对并不止一对,但是无论是寻找全部还是仅寻找其中之一,其原理没有区别,仅需略作改造即可 ...

随机推荐

&lbrack;公告&rsqb;Senparc&period;Weixin&period;MP v14&period;2&period;1 升级说明

在Senparc.Weixin.MP v14.2.1中,所有Senparc.Weixin.MP下的Container,命名空间已经从 Senparc.Weixin.MP.CommonAPIs 改为了  ...

ORA-27125&colon; unable to create shared memory segment

平台环境   :  Oracle Linux Server release 5.7 x86_64 数据库版本 :  Oracle Database 10g Enterprise Edition Rel ...

Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

在 中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...

UVA 753 UNIX 插头&lpar;EK网络流&plus;Floyd传递闭包&rpar;

UNIX 插头 紫书P374 [题目链接]UNIX 插头 [题目类型]EK网络流+Floyd传递闭包 &题解: 看了书之后有那么一点懂了,但当看了刘汝佳代码后就完全明白了,感觉他代码写的好牛逼 ...

PHP爬虫抓取网页内容 &lpar;simple&lowbar;html&lowbar;dom&period;php&rpar;

使用simple_html_dom.php,下载|文档 因为抓取的只是一个网页,所以比较简单,整个网站的下次再研究,可能用Python来做爬虫会好些.

&lbrack;Angular2 Router&rsqb; Load Data Based on Angular 2 Route Params

You can load resource based on the url using the a combination of ActivatedRouteand Angular 2’s Http ...

java下tcp的socket连接案例

package cn.stat.p4.ipdemo; import java.io.BufferedReader; import java.io.IOException; import java.io ...

LPC2478的外部中断使用

LPC2478外部中断 2478的外部中断模型如下 也就是说,port0和2支持外部中断,EINT0-2是三个独立管脚的中断,而EINT3则是port0和2的所有中断共同拥有的向量 对于port0和2 ...

Spring中各jar包的作用

Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects:Spring提供的对AspectJ框架的整合 Spring Beans:Spring ...

瞎捣鼓的code highlight

int a ; int b; public int  a ;int b   char c; h2 { text-align: left;}.postTitle{ background-color:#F ...


http://chatgpt.dhexx.cn/article/PT8otofK.shtml

相关文章

python scrapy 爬虫

文章目录 前言一、爬虫必备知识二、网络协议与爬虫重点三、静态页面抓取&#xff08;以CSDN论坛为例&#xff09;四、并发爬虫4.1 并行和并发4.2 GIL4.3 线程执行与同步4.3.1 线程执行4.3.2 线程同步 五、动态页面处理&#xff08;以京东商品为例&#xff09;5.1 区别分析5.2 京…

2022年网络我的网络爬虫学习心得

2022年网络我的网络爬虫学习心得 写在前面一、心得二、爬虫项目中所需要的pip模块1.requests2.bs43.Pandas4.selenium5.Scrapy6.gerapy_auto_extractor 三、简单爬虫实现1.配置环境2.简单爬虫实现&#xff08;mysql&#xff09;3.简单爬虫实现&#xff08;mongo&#xff09; 四…

网络爬虫入门

目录 一、爬取南阳理工学院ACM题目1、新建.py文件2、爬取结果3、代码分析&#xff08;1&#xff09;调用&#xff08;2&#xff09;定义表头&#xff08;3&#xff09;爬取信息并显示进度条&#xff08;4&#xff09;把爬取内容存放文件NYOJ_Subjects.csv中 二、爬取重庆交通大…

C语言宏定义

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

python——爬虫与脚本

python——爬虫与脚本 1. Python简介 1.1. Python起源 1.1.1语言作者 ​ 贵铎范罗萨姆&#xff08;Guido van Rossum&#xff09;荷兰人于1989年圣诞节创建了python。 底层语言为C语言 1991年初&#xff0c;python发布了第一个公开发行版。 用于自动化 金融行业、数据分析…

python网络爬虫:爬虫环境与爬虫简介

python网络爬虫 python爬虫环境与爬虫简介 认识爬虫 浏览网页基本流程 网络爬虫模拟了浏览器去发送请求并且返回响应结果的一个过程。 爬虫概念 网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。 网络爬虫就像一只蜘蛛一样在互联网上沿着…

python爬虫基础知识

今天学习了爬虫原理&#xff0c;网络通信基于URL统一资源定位器&#xff0c;这就是最简单最原始的爬虫。 欢迎加微信18599911861有更多python爬虫教程视频资源分享。 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常…

php编程语言和c语言区别,3月编程语言排行榜出炉,C语言暴走,PHP表现优秀!

近日&#xff0c;3月编程语言排行榜出炉了。 Python排名第四&#xff0c;GO语言仅排名第17位。 在此榜单中&#xff0c;作为编程语言常青树的C语言表现最为优秀&#xff0c;简直是暴走的节奏。 对于此次3月编程语言排行榜&#xff0c;程序员网友们纷纷发表了各自的一些看法&…

用C语言爬网页代码

今天下午把爬代码看了一下&#xff0c;也敲了&#xff0c;只不过我爬下来的总是乱码&#xff0c;现在大多数爬虫都是Python和Java&#xff0c;很少有人用C语言爬了&#xff1b; #include <stdio.h> #include <winsock2.h> #include<string.h> #pragma commen…

C语言的主要用途以及未来发展

截止到 2022 年&#xff0c;C语言已经发布了50 年&#xff0c;是不折不扣的“大叔”或者“大爷”&#xff0c;但是&#xff0c;C语言在编程界依然非常流行&#xff1b;2019 年&#xff0c;C语言由于速度快、平台独立的特性&#xff0c;在世界编程语言排行榜中夺得第二名。 C语言…

python爬虫笔记

requests 请求库 import requests import recontent requests.get(https://book.douban.com/).text pattern re.compile(<li.*?cover.*?href"(.*?)".*?title"(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(…

爬虫学习笔记

目录 一、 初识爬虫 1. 简单的爬虫 2. web请求 3. http协议 4. requests入门 二、数据解析与提取 1. 概述 2. Regular Expression 正则表达式 3. re模块 4. 豆瓣电影练习 5. 电影天堂练习 6. bs4 北京新发地、热搜榜 7. 抓取图库图片 8. Xpath语法 9. xpath猪八…

Python爬虫自学

Python爬虫自学 前言 这是我自己学习Python爬虫的学习笔记&#xff0c;内容大部分来自上海交通大学出版的《Python语言程序设计实践教程》&#xff0c;欢迎大家一起交流 参考博客&#xff1a; Python爬虫教程&#xff08;纯自学经历&#xff0c;保姆级教程&#xff09; Be…

爬虫基础day01

爬虫基础day01 一、介绍 什么是网络爬虫&#xff1f;&#xff08;面试题&#xff09; 网络爬虫&#xff08;Web Spider 又称为网页蜘蛛、网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;就收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动的抓取互联…

网络爬虫详解

网络爬虫&#xff08;web crawler&#xff0c;又称为网页蜘蛛&#xff08;只针对网页&#xff0c;B/S系统&#xff09;&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓…

Linux C语言实现简单爬虫

文章目录 代码案例源代码 应用知识hostent结构体gethostbyname()函数inet_pton和inet_ntopinet_ptoninet_ntop sockaddr_inin_addr结构htons 编辑socket()connect()sprintf函数format标签属性 setsockopt 代码案例 爬到的HTML文件 输入终端的参数 源代码 /***************…

fcntl函数 和 ioctl函数

文章目录 一、fcntl 函数二、ioctl 函数 一、fcntl 函数 fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作&#xff0c;譬如复制一个文件描述符&#xff08;与dup、dup2 作用相同&#xff09;、获取/设置文件描述符标志、获取/设置文件状态标志等&#xff0c;类似…

linux ioctl 理解

背景 传统的操作系统可以分成两层&#xff0c;用户层和内核层。内核代码处理敏感资源同时在不同应用程序中间提供了安全且可信的隔离&#xff0c;出于此&#xff0c;操作系统要阻止用户态的程序直接访问内核资源。用户空间的程序通常发出一个给内核的请求&#xff0c;该请求称为…

linux ioctl函数介绍

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioctl…

ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

ioctl函数详解 一、ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); //io的控制&#xff0c;设备的控制/***第一个参数d是打开的文件描述符***//***The second argument is a device-dependent request code&…