【Algorithm】快速排序(续)
前面在常用的排序算法中,已经写过一篇关于快速排序算法的博客,但是最近看到《The C Programming Language》这本书中的快速排序算法写的不错,所以就拿过来分享一下,下面我们来看一下吧。
快速排序算法是C. A. R. Hoare于1962年发明的。快速排序思想是:对于一个给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集。一个子集中的所有元素都小于该元素,另一个子集中的所有元素都大于或等于该元素。对这样两个子集递归执行这一过程,当某个子集中的元素数小于2时,这个子集就不需要再排序,终止递归。
从执行速度来讲,下列版本的快速排序函数可能不是最快的,但它是最简单的算法之一。在每次划分子集时,该算法总是选取各个子数组的中间元素。
/*=============================================================================
#
# FileName: fastSort.c
# Algorithm: 快速排序
# Author: Knife
# Created: 2014-06-27 16:35:36
#
=============================================================================*/
#include <stdio.h>
/* swap函数:交换v[k]与v[j]的值 */
void swap(int v[], int k, int j) {
int temp;
temp = v[k];
v[k] = v[j];
v[j] = temp;
}
/* 快速排序 */
void qsort(int v[], int left, int right) {
int j, last;
if (left >= right){ /* 若数组包含的元素个数少于两个,则return */
return;
}
swap(v, left, (left + right)/); /* 将划分子集的元素移动到v[left] */
last = left;
for (j = left+; j <= right; j++){ /* 划分子集 */
if (v[j] < v[left]){
swap(v, ++last, j);
}
}
/* 将分割点left放到last的位置,这样可以保证现在序列为【小小...小[关键字]大大...大】 */
swap(v, left, last);
/* 分别对分割点的左右子集进行递归 */
qsort(v, left, last-);
qsort(v, last+, right);
} void main() {
int j;
int arr[] = {,,,,,,,,,,,,,,,,,,,};
qsort(arr, , );
for(j=; j<=; j++){
printf("%d ", arr[j]);
}
printf("\n");
}
【Algorithm】快速排序(续)的更多相关文章
- Algorithm --> 快速排序
快速排序 算法思想 快速排序采用的思想是分治思想. 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的 元素值都 ...
- 【Algorithm】快速排序
一. 算法描述 快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value:然后再分别对前半段 ...
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- Java研发工程师面试题
基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 快速排序 Quicksort
发明者:Sir Charles Antony Richard Hoare 基本思想: 先对数据进行洗牌(Shuffle the array) 以数据a[j]为中心进行分区(Partition),使得a ...
- Algorithm: quick sort implemented in python 算法导论 快速排序
import random def partition(A, lo, hi): pivot_index = random.randint(lo, hi) pivot = A[pivot_index] ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- Java 快速排序两种实现
快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...
- 算法实例-C#-快速排序-QuickSort
算法实例 ##排序算法Sort## ### 快速排序QuickSort ### bing搜索结果 http://www.bing.com/knows/search?q=%E5%BF%AB%E9%80% ...
随机推荐
- js递归遍历key
需求:根据Json对象,查找到某key所有值 var obj = { first: "1", second: { name: "abc", mykey: &qu ...
- 编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息
随着高速(20M)宽带.HTPC.大容量硬盘(3T)的普及,下载高清片并利用大屏幕观看也成为普通的事情. 随着下载影片的增多,管理就有了问题,有时在茫茫文件夹下找寻一个影片也是一件费时费力的事. 于是 ...
- JS将"\/Date(1530104033000)\/" 格式化
JS将/Date(1446704778000)/转换成str: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) ...
- Web - TCP的三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,採用三次握手建立一个连接. 第一次握手:建立连接时,client发送syn包(syn=j)到server,并进入SYN_SENT状态,等待serv ...
- 解剖 CPU
http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.html 有一个瑞典 Lund 大学物理学博士生,就真的这么干了,还把照片放到网上.我们知道,CP ...
- 关于ngModelOptions用法总结 让校验不过的验证绑定ngModel
updataOn 指定ng-model以什么绑定事件触发 default 就是默认的大家都知道blur 失去焦点的时候更新mouseover 鼠标滑过....... <input type=&q ...
- Android缓存处理
Android缓存: 採用缓存,能够进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不须要实时更新.哪怕是3-5分 ...
- Elasticsearch之集群脑裂
https://www.cnblogs.com/zlslch/p/6477312.html
- ZH奶酪:PHP error_log()将错误信息写入日志文件
error_log() 是发送错误信息到某个地方的一个函数,在程序编程中比较常见,尤其是在程序调试阶段. bool error_log ( string $message [, int $messag ...
- Max SPA
Stingray Response_ContentType Stingray javascript 其实是支持返回原生html的, 有了这个事情就简单了 RHTML - Response_Conten ...