快速排序QuickSort

template <class Item>
void quickSort (Item a[], int l, int r) {
if (r<=l)
return;
int i = partition(a, l, r);
quickSort(a, l, i-);
quickSort(a, i+, r);
} template <class Item>
int partition (Item a[], int l, int r) {
int i = l -, j = r;
Item v = a[r];
for ( ; ; ) {
while (a[++i] < v);
while (a[--j] > v)
if (j == i) break;
if (i >= j) break;
exch (a[i], a[j]);
}
exch (a[i], a[r]);
return i;
}

快速排序的思想可以用来找出数组中第k大的数

template <class Item>
Item select (Item a[], int l, int r, int k) {
if (r <= l)
return a[l];
int i = partition(a, l, r);
if (i > k)
select(a, l, i-, k);
if (i < k)
select(a, i+, r, k);
}

归并排序MergeSort

数组实现

template <class Item>
void merge(Item a[], int l, int m, int r) {
int i, j;
static Item aux[maxN];
for (i = m; i>=l; i--)
aux[i] = a[i];
for (j = m; j<r; j++)
aux[r+m-j] = a[j+];
for (int k = l; k<=r; k++) {
if (aux[j] < aux[i])
a[k] = aux[j--];
else
a[k] = aux[i++];
}
} template <class Item>
void mergeSort (Item a[], int l, int r) {
if (r <= l)
return;
int m = (r+l) / ;
mergeSort(a, l, m);
mergeSort(a, m+, r);
merge(a, l, m, r);
}

链表实现

link merge (link a, link b) {
node dummy();
link head = &dummy, c = head;
while ((a!=) && (b!=)) {
if (a->item < b->item) {
c->next = a;
c = a;
a = a->next;
}
else {
c->next = b;
c = b;
b = b->next;
}
}
c->next = (a==) ? b : a;
return head->next;
} link mergeSort (link c) {
if (c== || c->next==)
return c;
link a = c, b = c->next;
while ((b!=) && (b->next!=)) {
c = c->next;
b = b->next->next;
}
return merge (mergeSort(a), mergeSort(b));
}

堆排序HeapSort

template <class Item>
void fixDown (Item a[], int k, int n) {
while (*k+ < n) {
int child = *k + ;
if ((child+<n) && (a[child]<a[child+])
child++;
if (a[k] < a[child]) {
exch(a[k], a[child]);
k = child;
}
else
return;
} template <class Item>
void heapSort (Item a[], int n) {
int k;
// 建堆
for (k = n/; k >= ; k--)
fixDown(a, k, n); //排序
while (n->) {
exch (a[], a[n-]);
fixDown(a, k, --n);
}
}

排序算法——QuickSort、MergeSort、HeapSort(C++实现)的更多相关文章

  1. 排序算法FOUR:堆排序HeapSort

    /** *堆排序思路:O(nlogn) * 用最大堆,传入一个数组,先用数组建堆,维护堆的性质 * 再把第一个数与堆最后一个数调换,因为第一个数是最大的 * 把堆的大小减小一 * 再 在堆的大小上维护 ...

  2. 排序算法之快速排序(Quicksort)解析

    一.快速排序算法的优点,为什么称之为快排? Quicksort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想. 所谓的分治思想就是对一个问题“分而治之”,用分治思想来解决问题需要两个 ...

  3. 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)

    在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...

  4. 排序算法之堆排序(Heapsort)解析

    一.堆排序的优缺点(pros and cons) (还是简单的说说这个,毕竟没有必要浪费时间去理解一个糟糕的的算法) 优点: 堆排序的效率与快排.归并相同,都达到了基于比较的排序算法效率的峰值(时间复 ...

  5. Python排序算法(六)——归并排序(MERGE-SORT)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10800699.html 一.归并排序(MERG ...

  6. 排序算法五:随机化快速排序(Randomized quicksort)

    上一篇提到,快速排序的平均时间复杂度是O(nlgn),比其他相同时间复杂度的堆排序.归并排序都要快,但这是有前提的,就是假定要排序的序列是随机分布的,而不是有序的.实际上,对于已经排好的序列,如果用快 ...

  7. 排序算法四:快速排序(Quicksort)

    快速排序(Quicksort),因其排序之快而得名,虽然Ta的平均时间复杂度也是O(nlgn),但是从后续仿真结果看,TA要比归并排序和堆排序都要快. 快速排序也用到了分治思想. (一)算法实现 pr ...

  8. 排序算法三:堆排序(Heapsort)

    堆排序(Heapsort)是一种利用数据结构中的堆进行排序的算法,分为构建初始堆,减小堆的元素个数,调整堆共3步. (一)算法实现 protected void sort(int[] toSort) ...

  9. 斯坦福算法分析和设计_2. 排序算法MergeSort

      Motivate MergeSort是个相对古老的算法了,为什么现在我们还要讨论这么古老的东西呢?有几个原因: 它虽然年龄很大了,但是在实践中一直被沿用,仍然是很多程序库中的标准算法之一. 实现它 ...

随机推荐

  1. 神奇的问题记录【SqlDataAdapter Fill DataSet】

    今天发现程序中有一张报表查询速度很慢[全条件要二分钟左右],查找相关原因,准备进行优化处理.注:报表调用存储过程,存储过程返回两个table就有以下神奇的故事: 直接将SQL语句在SSMS中执行发现全 ...

  2. 在YII中使用Redis等缓存

    Yii AR 单行数据-自动缓存机制 | LOCKPHP Yii AR 单行数据-自动LOG机制 CActiveRecordBehavior进阶 | LOCKPHP 缓存 - 权威指南 - Yii F ...

  3. 正则匹配:Email 密码强度 身份证 手机号 日期 数字每4个字空一格等

    正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升.下面是在前端开发中经常 ...

  4. Http协议简单解析及web请求过程

    HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. 基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤: 1)    ...

  5. 1514:数值的整数次方 @jobdu

    题目1514:数值的整数次方 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:377 解决:103 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent. ...

  6. SpringMVC学习系列 之 表单标签

    http://www.cnblogs.com/liukemng/p/3754211.html 本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图 ...

  7. Spring Bean Scope 有状态的Bean 无状态的Bean

    http://blog.csdn.net/anyoneking/article/details/5182164 在Spring的Bean配置中,存在这样两种情况: <bean id=" ...

  8. MS-SQLSERVER中的MSDTC不可用解决方法

    今天在本地机直接在触发器里更新还有一台服务器数据时出现: MSDTC不可用  解决的方法:  在windows控制面版-->管理工具-->服务-->Distributed   Tra ...

  9. 利用http协议实现图片窃取

    在http协议里有一个referer,用来标示站点来源,大家都遇到这样的情况.转载了一篇博客,图片显示不正常,就和头信息里这个有关 原理:在webserver里面.依据http协议里面refered头 ...

  10. Hadoop与分布式开发

        hadoop上的并行应用程序开发是基于MapReduce编程框架的,MapReduce编程模型的原理是:利用一个输入的key/value对集合来产生一个输出的key/value对集合. Map ...