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 }

输入: 3 1 9 5 4 6 2 
输出: 4 1 5 9 2 6 3 

转载于:https://www.cnblogs.com/xudong-bupt/p/7435259.html

算法:快速排序实现 定制比较函数相关推荐

  1. 读《c#与算法--快速排序》随笔

    <c#与算法--快速排序>地址: http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html 随手写的测试DEMO,web程序不 ...

  2. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  3. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

  4. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  5. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  6. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  7. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  8. 计算机毕设(附源码)JAVA-SSM基于协同过滤算法的食谱定制系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

最新文章

  1. 【BIEE】数据透视表格第一列添加序号
  2. 构建之法课后作业第二次作业第一题
  3. vscode 结束_8 个给前端的顶级 VS Code 扩展插件
  4. android 高德获取省市,高德地图定位获取当前地址城市街道等详细信息(全部代码)...
  5. 英特尔预计第12代酷睿H系列处理器将有超过100款设备采用
  6. 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
  7. vb.net 同时给多个属性赋值_一个float值赋值给double,结果是什么?进来重温一下类型提升吧...
  8. 面向对象---基础概念
  9. webservice和webserver区别
  10. 课题申报书范文_高等学校教改课题申报书范文
  11. 闲聊:Android 平台网络游戏加速器(二)
  12. 泛微 - eteams
  13. python实现图像像素修改脚本
  14. 在网页中创建自己的调试控制台
  15. ALCOA+CCEA原则(数据完整性标准)
  16. virtualbox E_INVALIDARG (0x80070057) 和 E_FAIL (0x80004005) SessionMachine
  17. Python 中 send的解释
  18. 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
  19. (项目)在线教育平台(十三)
  20. 极智嘉拟科创板上市后再创发展里程:全球AMR销售突破2万台

热门文章

  1. Oracle CDC (Change Data Capture)更新数据捕获——概述
  2. 面试高频题:单链表的逆置操作/链表逆序
  3. 用QQ提问的技巧,用了之后可以提高效率,呵呵。
  4. “怀才不遇”与“怀才不孕”怎么办?
  5. iOS ---网络请求封装(自动缓存与手动缓存)
  6. SpringBoot-JPA入门
  7. QQ爬虫-爬取QQ空间
  8. 详细介绍Java垃圾回收机制
  9. 基于ipfire的open***功能--client to net (Roadwarrior)配置(一)
  10. Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)