算法:快速排序实现 & 定制比较函数
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 实现的常见排序算法有:冒泡排序.选择排序.插入排序.谢尔排序.快速排序(递归).快速排序(堆栈).归并排序.堆排序. 过程 "快速排序"的思想很简单 ...
随机推荐
- 【python学习-1】python环境设置与开发
开始学习python,打算把学习过程都记下来. 下载python,虽然推荐官网,但是感觉官网上面下载python太慢,所以我最后是在csdn上面下载的python版本(3.2.4 windows 64 ...
- 什么情况下,会用到fiddler或者charles?
有的页面,比如设限制的html页面,比如原生页面,只能在手机APP里面查看,无法在电脑浏览器中打开查看,这时候,需要用fiddler抓包来查看返回数据,定位问题.
- UI控件(ios)---UIImageView
在实现网络异步存储中,突然发现对控件UIImageView有点生疏了,在这里复习一下. UIImageView,顾名思义是用来放置image的. 1.初始化UIImageView UIImageV ...
- zoj 3460 二分+二分图匹配
不错的思想 /* 大致题意: 用n个导弹发射塔攻击m个目标.每个发射架在某个时刻只能为 一颗导弹服务,发射一颗导弹需要准备t1的时间,一颗导弹从发 射到击中目标的时间与目标到发射架的距离有关.每颗导弹 ...
- bzoj 4004 向量拟阵
题解RT. eps = 1e-10 WrongAnswer eps = 1e-5 Accepted /************************************************* ...
- 使用POI操作PPT文档(插入文本、图片)转
1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片如下代码创建空的PPT文档: SlideShow ppt ...
- Google Reader明日关闭:14款替代品对比
北京时间6月30日上午消息,谷歌将于7月1日关闭RSS阅读器服务Google Reader,目前许多用户已转向其他的RSS阅读器服务. 美国科技博客Marketing Land本周对市面上多个RSS阅 ...
- sublime text2 用ctags插件实现方法定位(转)
我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安装其他插件就方便了. 点击sublime的菜单栏 view->show console :现在打开了控制台, ...
- 【来龙去脉系列】深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- kcon 黑客大会 github
https://github.com/knownsec/KCon https://paper.seebug.org/107/ CISP认证 https://habo.qq.com/ https://g ...