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. C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).

    目录 C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector). auto_ptr scoped_ptr ptr_vector C++智能指针,指针容器原 ...

  2. EntityManager的使用

    1.最基础的查询 CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb. ...

  3. 运行程序,解读this指向---case4

    var param = 'window'; var obj1 = { param: 'obj1', fn1: function () { console.log(this.param); }, fn2 ...

  4. BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  5. BZOJ3009 : 集合

    取一棵生成森林,根据题目限制可得,与一个点相连的多余的边数是$O(\sqrt{m})$级别的. 对于树边,每个点维护3棵权值线段树,依次保存它的儿子里各个集合的边. 再开3*3个分块数组,记录多余边以 ...

  6. FireDAC 下的 Sqlite [4] - 创建数据库

    建立数据库的代码: {建立内存数据库的一般代码:} begin FDConnection1.DriverName := 'SQLite'; //同 FDConnection1.Params.Add(' ...

  7. CentOS 7解压安装PHP5.6.13

    自动化脚本: https://github.com/easonjim/centos-shell/blob/master/php/install-php_5.6.13.sh

  8. Javascript Array和String的互转换。

    Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...

  9. [置顶] 九度笔记之 1494:Dota

    题目1494:Dota 1 秒 内存限制:128 兆 特殊判题:否 提交:559 解决:122 题目描述: 大家都知道在dota游戏中,装备是对于英雄来说十分重要的要素. 英雄们不仅可以购买单个的装备 ...

  10. Vue 插件写法

    都说Vue2简单,上手容易,但小马过河,自己试了才晓得,除了ES6语法和webpack的配置让你感到陌生,重要的是思路的变换,以前随便拿全局变量和修改dom的锤子不能用了,变换到关注数据本身.vue的 ...