算法:快速排序实现 & 定制比较函数
1. 快速排序基本算法
#include<stdio.h>
const static int NUM = ; int quick_sort(int *a, int start, int end){
if (start >= end)
return ; int partition = a[start]; //分割点value, 设置为第一个点.最后patition点设置为这个点
int i = start; //开始点
int j = end; //结束点 while(i<j){ //循环多处判断i<j, 结束时i=j
while(i<j && a[j] >= partition) //i可置换
--j;
a[i] = a[j]; while(i<j && a[i] <= partition) //j可置换
++i;
a[j] = a[i];
}
printf("i=%d j=%d\n", i, j); a[i] = partition; //以上循环结束, i==j, i处即为分割点
quick_sort(a, start, i-);
quick_sort(a, i+, end);
return ;
} void print(int *a, int start, int end){
for (int i = start; i <= end; ++i){
printf("%d ", a[i]);
}
printf("\n");
} int main(){
int a[NUM];
for (int i=;i<NUM;++i){
a[i] = i%;
} print(a, , NUM-);
quick_sort(a, , NUM-);
print(a, , NUM-);
return ;
}
2. 快速排序主要是定制比较函数,通过定制比较函数,可以实现不同的输出结果
下面算法定制排序,排序结果分为4个桶,桶内数据是升序排列。
#include<stdio.h>
#include<stdlib.h>
const static int BUCKET = ; void print(int *a, int start, int end){
for (int i = start; i <= end; ++i){
printf("%d ", a[i]);
}
printf("\n");
} int comp(const void *a, const void *b){
int va = *(int*)a;
int vb = *(int*)b; if (va%BUCKET > vb%BUCKET){
return ;
}
else if (va%BUCKET < vb%BUCKET){
return -;
}
return va - vb;
} int main(){
int a[] = {,,9,5,4,,2};
int NUM = sizeof(a)/sizeof(int); print(a, , NUM-);
qsort(a, NUM, sizeof(int), comp);
print(a, , NUM-);
return ;
}
算法:快速排序实现 & 定制比较函数的更多相关文章
- 《Java算法》排序算法-快速排序
排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...
- 数据结构和算法(Golang实现)(25)排序算法-快速排序
快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...
- 使用 js 实现十大排序算法: 快速排序
使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- 基本排序算法——快速排序java实现
简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...
- java基础算法-快速排序
玩博客园很多年,第一次写点什么,就从基础开始吧.最近去面试,发现自己算法忘光了,赶紧复习下.以下代码自带测试类,复制进eclipse中右键 run as -->java application ...
- python数据结构与算法——快速排序
快速排序通过不断将数列分段,使得较小的数在左边的序列,较大的数在右边的序列,不断重复此过程实现排序效果.通过设置两个哨兵不断的找两个序列的较小数,较大数,并把左右的数据互换,实现对数据从粗到细的排序. ...
- Java算法-快速排序
快速排序也是用归并方法实现的一个“分而治之”的排序算法,它的魅力之处在于它能在每次partition(排序算法的核心所在)都能为一个数组元素确定其排序最终正确位置(一次就定位准,下次循环就不考虑这个元 ...
- JavaScript 排序算法——快速排序
常见排序 javaScript 实现的常见排序算法有:冒泡排序.选择排序.插入排序.谢尔排序.快速排序(递归).快速排序(堆栈).归并排序.堆排序. 过程 "快速排序"的思想很简单 ...
随机推荐
- 在 Intellij IDEA 中部署 Java 应用到 阿里云 ECS
你有没有怀疑过人生 多的去了 在开发过程中,发布部署项目是一件令人头疼的事 拿springboot项目来说吧(springboot算是已经极大简化了部署了) 步骤 运行clean install 将打 ...
- Android中线程通信的方式
Android 跨线程通信 android 中是不允许在主线程中进行 网络访问等事情的因为UI如果停止响应5秒左右的话整个应用就会崩溃,到Android4.0 以后 Google强制规定,与网络相关的 ...
- codevs 2804 最大最小数质因数
题目描述 Description 先输入n,n<=20;再依次输入n个不同的数,每个数<=1000000;找出最大数和最小数,并输出最大最小数的质因数,没有质因数则输出0. 输入描述 In ...
- Java删除ArrayList中的重复元素
Java删除ArrayList中的重复元素的2种方法 ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇到那种必 ...
- 独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客
独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客 http://blog.sina.com.cn/s/blog_13cb5d69e0102vuvk.html
- HDU 4122 Alice's mooncake shop (RMQ)
Alice's mooncake shop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Mysql数据库大表归档操作
由于公司的某个系统数据表过亿,考虑到数据表的压力.所以根据某个时间点对数据表做了一个归档.以下的操作是在当前的数据库新建表用于存储历史数据,然后再对生产表做一个清理操作.如果有条件的话可以把归档的数据 ...
- Golang Vendor 包机制 及 注意事项
现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...
- Unity3D脚本(MonoBehaviour)生命周期
场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...
- Win10年度更新开发必备:VS2015 Update 2正式版下载汇总
========================================================================== 微软在03月30日发布了Visual Studio ...