title: 快速排序法(quick sort)
tags: 分治法(divide and conquer method)
grammar_cjkRuby: true
---

算法原理

分治法的基本思想:将原问题分解为若干个更小的与原问题相似的问题,然后递归解决各个子问题,最后再将各个子问题的解组合成原问题的解。
利用分治法可以将解决办法分为 “三步走” 战略:
(1) 在数据集中选定一个元素作为“基准”(pivot)
(2) 将所有数据集小于基准的元素放在基准左边,大于基准的元素放在基准右边,把原数据集分为两个数据集的操作叫做“分区”,分区结束后基准所在的位置也就是基准最后的位置
(3) 分别对基准左右两边的数据集进行前两个步骤,直至数据集只剩下一个数据为止

C语言实现

/***********************/
//章节:第四章
//内容:快速排序
/***********************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>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 eleswap(v, last, (first + last)/2); //move partition elemstoreindex =  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;
}

实例分析

(1)取5作为pivot,然后将其移动到最后一个位置
(2)从第一个数3到倒数第二个数5分别和pivot比较,如果小于等于pivot的数依次从前向后排
(4)将pivot 5移回两个分区中间

转载于:https://www.cnblogs.com/yujianfei/p/7835153.html

C语言实现快速排序法(分治法)相关推荐

  1. 蛮力法-分治法-处理最近对问题

    两种方法对最近对问题的解释 背景描述:   终于,隔了将近一周,开始更新第二篇算法博客.今天的问题是最近对问题.问题描述如下:对于二维坐标系中的若干个点,从中判断出相距最近的两个点,并输出最近的这个距 ...

  2. 演算法 - 分治法(Divide-and-Conquer)

    排版真的乱到一个 ¥*@#&? 一,Divide-and-Conquer(分治法) 二,Recurrences(递归) 1,替代法(Substitution method) 2,Tree Me ...

  3. 005-算法-分治法

    一.概念: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以 ...

  4. C语言中快速排序法(从小到大)实现过程详细分析

    快速排序法:实际上是对冒泡排序法的一种改进. 算法:是描述求解问题方法的操作步骤集合. 快速排序法这一算法的基本思想是:首先设定一个分界值(一般是数组中的起始元素值),通过该分界值将数组的元素值分成左 ...

  5. 求最大字段和问题(常规法,分治法,动态规划法)

    算法设计与分析-----求最大字段和问题 问题描述:给定由n个整数组成的序列(a1,a2,a3......,an),求该序列的子段的最大值. 常规法: 从a1开始,求出以a1开头的子序列最大的和为su ...

  6. 求解最大连续子序列和问题(Java)蛮力法+分治法

    求解最大连续子序列和问题 [问题描述] 给定一个有n(n>=1)个整数的序列,要求求出其中最大连续子序列的和. [样例输入] 6 -2 11 -4 13 -5 -2 [样例输出] 20 [问题求 ...

  7. c语言排快速排序过程,C语言中快速排序法怎么排

    快速排序法的排法:首先每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边:然后将大于等于基准点的数全部放到基准点的右边:最后在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之 ...

  8. [C语言]利用链表采用分治法进行递归查找不大于10000个数中的最大值

    给定一个含n个整数顺序存储的线性表,按分治法思路,采用二分策略,设计一个求出其最大值和最小值算法,编写相应测试程序.要求使用分治法设计出其中求最大值的递归算法. 输入样例: 100 2 3 -2 -8 ...

  9. 螺旋方阵(列举法,分治法,java版,逆时针)

    目录 螺旋方阵介绍 1.适合基础薄弱同学的 列举法 2.螺旋方阵代码 螺旋方阵介绍 所谓"螺旋方阵",是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向 ...

最新文章

  1. Python之Mysql及SQLAlchemy操作总结
  2. java == equals_java中==与equals
  3. Java实现字符全阵列阵列
  4. Spring Boot 日志管理
  5. SpringMVC注解解析
  6. oracle离线文档查dbms_Oracle的健康检查–dbms_hm的使用 | 学步园
  7. php伪静态后无法获得url中参数_php runtime、http web中rewrite浅解和方案
  8. Pandas.plot 做图
  9. linux如何确认账号过期了,linux下非root用户秘密过期如何确认,如果确认,该如何延期使其有效?...
  10. 李宏毅自然语言处理——ELMO/BERT/GPT简介
  11. VC知识库的离线包整合
  12. html5 go语言运行环境,GO语言环境搭建 及 helloworld开发
  13. 阿里云在安全方面有哪些防护措施
  14. provisional headers are shown问题解决
  15. 气象大数据平台(天擎)数据读取方法(python)(雷达数据下载)
  16. Multimodal Fusion(多模态融合)
  17. Android开发 Retrofit使用
  18. linux用户和组管理的实验报告,linux用户管理任务实验报告
  19. Loadrunner安装破解
  20. idea java代码混淆_idea 环境下代码混淆打包

热门文章

  1. 【我的Android进阶之旅】解决:The currently selected variant “debug“ uses split APKs, but none of the 1 split...
  2. 更新后的 PHP: 现代 PHP 中的密码安全性
  3. 请教如何实现SQL查询24小时内,当前时间之前20分钟的信息
  4. 路由器的无线桥接(WDS)和有线桥接办法
  5. SwiftUI 控件之Text 文本框显示古诗(含demo)
  6. 中国央行已初步完成基于区块链技术的数字化票据系统(GBCAX)
  7. html css 一行字变为 固定字数加上点点点
  8. 拼团小程序源码_小程序拼团+团购+分销模式,玩转小程序用户裂变
  9. 佛家养生100条(经典) - 1
  10. kali linux开启SSH连接