快速排序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. POJ 1579 Function Run Fun

    简单动态规划,详细代码网上有!

  2. centos 中查找依赖及库

    yum search ** yum whatprovides libQtGui.so.4

  3. sql server 分布式事务

    使用分布式事务刚好可以解决集群同时更新多台SQL SERVER数据库,要么全部成功,要么全部回滚的需要. 原来微软早考虑到此方面的问题了. 下面背书,贴出微软官网上面的帮助文档: 分布式事务跨越两个或 ...

  4. 编写Word宏使选中的图片改变为固定宽度并保持纵横比

    代码如下: Sub 改变图片宽度为12并设置灰色边框() ' ' 改变图片宽度为12并设置灰色边框 宏 ' '     ' Application.Run MacroName:="改变图片大 ...

  5. Android基本功:Handler消息传送机制

    一.什么是UI线程 当程序第一次启动的时候,Android会同时启动一条主线程( Main Thread). 主要负责处理与UI相关的事件. 二.UI线程存在的问题 出于性能优化考虑,Android的 ...

  6. Android框架浅析之锁屏(Keyguard)机制原理

    最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...

  7. 摄像机(CCCamera)

  8. phpcms 源码分析四: 数据库类实现

    这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHP ...

  9. arcgis通过 Python 使用工具 获得结果信息

    通过 Python 使用工具 ArcGIS 10 每个地理处理工具都具有一组固定的参数,这些参数为工具提供执行所需的信息.工具通常具有定义一个或多个数据集的输入参数,这些数据集一般用于生成新的输出数据 ...

  10. flex学习网站地址

    http://hacker47.iteye.com/blog/213887 http://www.cuplayer.com/player/PlayerCode/Flex/ http://bbs.9ri ...