算法:快速排序实现 定制比较函数
1. 快速排序基本算法
1 #include<stdio.h> 2 const static int NUM = 47; 3 4 int quick_sort(int *a, int start, int end){ 5 if (start >= end) 6 return 0; 7 8 int partition = a[start]; //分割点value, 设置为第一个点.最后patition点设置为这个点 9 int i = start; //开始点 10 int j = end; //结束点 11 12 while(i<j){ //循环多处判断i<j, 结束时i=j 13 while(i<j && a[j] >= partition) //i可置换 14 --j; 15 a[i] = a[j]; 16 17 while(i<j && a[i] <= partition) //j可置换 18 ++i; 19 a[j] = a[i]; 20 } 21 printf("i=%d j=%d\n", i, j); 22 23 a[i] = partition; //以上循环结束, i==j, i处即为分割点 24 quick_sort(a, start, i-1); 25 quick_sort(a, i+1, end); 26 return 0; 27 } 28 29 void print(int *a, int start, int end){ 30 for (int i = start; i <= end; ++i){ 31 printf("%d ", a[i]); 32 } 33 printf("\n"); 34 } 35 36 int main(){ 37 int a[NUM]; 38 for (int i=0;i<NUM;++i){ 39 a[i] = i%10; 40 } 41 42 print(a, 0, NUM-1); 43 quick_sort(a, 0, NUM-1); 44 print(a, 0, NUM-1); 45 return 0; 46 }
2. 快速排序主要是定制比较函数,通过定制比较函数,可以实现不同的输出结果
下面算法定制排序,排序结果分为4个桶,桶内数据是升序排列。
1 #include<stdio.h> 2 #include<stdlib.h> 3 const static int BUCKET = 4; 4 5 void print(int *a, int start, int end){ 6 for (int i = start; i <= end; ++i){ 7 printf("%d ", a[i]); 8 } 9 printf("\n"); 10 } 11 12 int comp(const void *a, const void *b){ 13 int va = *(int*)a; 14 int vb = *(int*)b; 15 16 if (va%BUCKET > vb%BUCKET){ 17 return 1; 18 } 19 else if (va%BUCKET < vb%BUCKET){ 20 return -1; 21 } 22 return va - vb; 23 } 24 25 int main(){ 26 int a[] = {3,1,9,5,4,6,2}; 27 int NUM = sizeof(a)/sizeof(int); 28 29 print(a, 0, NUM-1); 30 qsort(a, NUM, sizeof(int), comp); 31 print(a, 0, NUM-1); 32 return 0; 33 }
转载于:https://www.cnblogs.com/xudong-bupt/p/7435259.html
算法:快速排序实现 定制比较函数相关推荐
- 读《c#与算法--快速排序》随笔
<c#与算法--快速排序>地址: http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html 随手写的测试DEMO,web程序不 ...
- 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化
今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...
- 快速排序 java导包_排序算法-快速排序(Java实现)
上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...
- 排序算法 快速排序 python 0913
排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...
- 排序算法 快速排序【详细步骤图解】
排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...
- 【图解算法】排序算法——快速排序
简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...
- JavaScript的排序算法——快速排序
排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...
- 计算机毕设(附源码)JAVA-SSM基于协同过滤算法的食谱定制系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 十大经典排序算法-快速排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
最新文章
- 【BIEE】数据透视表格第一列添加序号
- 构建之法课后作业第二次作业第一题
- vscode 结束_8 个给前端的顶级 VS Code 扩展插件
- android 高德获取省市,高德地图定位获取当前地址城市街道等详细信息(全部代码)...
- 英特尔预计第12代酷睿H系列处理器将有超过100款设备采用
- 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
- vb.net 同时给多个属性赋值_一个float值赋值给double,结果是什么?进来重温一下类型提升吧...
- 面向对象---基础概念
- webservice和webserver区别
- 课题申报书范文_高等学校教改课题申报书范文
- 闲聊:Android 平台网络游戏加速器(二)
- 泛微 - eteams
- python实现图像像素修改脚本
- 在网页中创建自己的调试控制台
- ALCOA+CCEA原则(数据完整性标准)
- virtualbox E_INVALIDARG (0x80070057) 和 E_FAIL (0x80004005) SessionMachine
- Python 中 send的解释
- 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
- (项目)在线教育平台(十三)
- 极智嘉拟科创板上市后再创发展里程:全球AMR销售突破2万台
热门文章
- Oracle CDC (Change Data Capture)更新数据捕获——概述
- 面试高频题:单链表的逆置操作/链表逆序
- 用QQ提问的技巧,用了之后可以提高效率,呵呵。
- “怀才不遇”与“怀才不孕”怎么办?
- iOS ---网络请求封装(自动缓存与手动缓存)
- SpringBoot-JPA入门
- QQ爬虫-爬取QQ空间
- 详细介绍Java垃圾回收机制
- 基于ipfire的open***功能--client to net (Roadwarrior)配置(一)
- Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)