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 ;
}
输入: 3 1 9 5 4 6 2 
输出: 4 1 5 9 2 6 3 

算法:快速排序实现 & 定制比较函数的更多相关文章

  1. 《Java算法》排序算法-快速排序

    排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...

  2. 数据结构和算法(Golang实现)(25)排序算法-快速排序

    快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...

  3. 使用 js 实现十大排序算法: 快速排序

    使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...

  4. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  5. 基本排序算法——快速排序java实现

    简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...

  6. java基础算法-快速排序

    玩博客园很多年,第一次写点什么,就从基础开始吧.最近去面试,发现自己算法忘光了,赶紧复习下.以下代码自带测试类,复制进eclipse中右键 run as -->java application ...

  7. python数据结构与算法——快速排序

    快速排序通过不断将数列分段,使得较小的数在左边的序列,较大的数在右边的序列,不断重复此过程实现排序效果.通过设置两个哨兵不断的找两个序列的较小数,较大数,并把左右的数据互换,实现对数据从粗到细的排序. ...

  8. Java算法-快速排序

    快速排序也是用归并方法实现的一个“分而治之”的排序算法,它的魅力之处在于它能在每次partition(排序算法的核心所在)都能为一个数组元素确定其排序最终正确位置(一次就定位准,下次循环就不考虑这个元 ...

  9. JavaScript 排序算法——快速排序

    常见排序 javaScript 实现的常见排序算法有:冒泡排序.选择排序.插入排序.谢尔排序.快速排序(递归).快速排序(堆栈).归并排序.堆排序. 过程 "快速排序"的思想很简单 ...

随机推荐

  1. 在 Intellij IDEA 中部署 Java 应用到 阿里云 ECS

    你有没有怀疑过人生 多的去了 在开发过程中,发布部署项目是一件令人头疼的事 拿springboot项目来说吧(springboot算是已经极大简化了部署了) 步骤 运行clean install 将打 ...

  2. Android中线程通信的方式

    Android 跨线程通信 android 中是不允许在主线程中进行 网络访问等事情的因为UI如果停止响应5秒左右的话整个应用就会崩溃,到Android4.0 以后 Google强制规定,与网络相关的 ...

  3. codevs 2804 最大最小数质因数

    题目描述 Description 先输入n,n<=20;再依次输入n个不同的数,每个数<=1000000;找出最大数和最小数,并输出最大最小数的质因数,没有质因数则输出0. 输入描述 In ...

  4. Java删除ArrayList中的重复元素

    Java删除ArrayList中的重复元素的2种方法 ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇到那种必 ...

  5. 独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客

    独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客   http://blog.sina.com.cn/s/blog_13cb5d69e0102vuvk.html

  6. 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 ...

  7. Mysql数据库大表归档操作

    由于公司的某个系统数据表过亿,考虑到数据表的压力.所以根据某个时间点对数据表做了一个归档.以下的操作是在当前的数据库新建表用于存储历史数据,然后再对生产表做一个清理操作.如果有条件的话可以把归档的数据 ...

  8. Golang Vendor 包机制 及 注意事项

    现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...

  9. Unity3D脚本(MonoBehaviour)生命周期

    场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...

  10. Win10年度更新开发必备:VS2015 Update 2正式版下载汇总

    ========================================================================== 微软在03月30日发布了Visual Studio ...