几种排序算法 (快速排序+堆排序)

标签: 算法排序
8人阅读 评论(0) 收藏 举报
分类:
快速排序
#include <iostream>
 
using namespace std;
 
void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录作为枢轴*/
 
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
 
        a[first] = a[last];/*将比第一个小的移到低端*/
 
        while(first < last && a[first] <= key)
        {
            ++first;
        }
         
        a[last] = a[first];    
/*将比第一个大的移到高端*/
    }
    a[first] = key;/*枢轴记录到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}
int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 
    Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1否则内存越界*/
 
    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        cout << a[i] << "";
    }
     
    return 0;
}

  堆排序

//整理节点time:O(lgn)
template<typename T>
void minHeap(T *arry, int size, int element) {
int temp = element;
int lchild = temp * 2 + 1, rchild = lchild + 1;
while (rchild < size)                                    //存在右子树;
{
if (arry[rchild] < arry[temp] && arry[lchild] < arry[temp])
return;


if ((arry[rchild] < arry[temp] && arry[lchild] > arry[temp])|| (arry[rchild] >arry[temp] && arry[lchild] > arry[temp]&&arry[rchild]<arry[lchild]))
{
swap(arry[lchild], arry[temp]);
temp = lchild;
}
else{
    swap(arry[rchild], arry[temp]);
    temp = rchild;
        }


lchild = temp * 2 + 1, rchild = lchild + 1;
}
if (lchild < size &&arry[lchild] < arry[temp])       //只有左子树
swap(arry[lchild], arry[temp]);
return;

}


//堆排序time:O(nlgn)
template<typenameT>
void HeapSort(T*arry,int size)
{
int i;
for(i=size-1;i>=0;i--)//从子树开始整理树
{
MinHeapify(arry,size,i);
}
while(size>0)//拆除树
{
swap(arry[size-1],arry[0]);//将根(最小)与数组最末交换
size--;//树大小减小
MinHeapify(arry,size,0);//整理树
}
return;
}


查看评论

排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)

以下是对《算法导论(第二版)》
  • XD_lixin
  • XD_lixin
  • 2014-04-28 21:47:14
  • 1172

【PHP-排序算法】快速排序、堆排序算法时间复杂度比较

介绍 在以往工作或者面试的时候常会碰到一个问题,如何实现海量TopN,就是在一个非常大的结果集里面快速找到最大的前10或前100个数,同时要保证内存和速度的效率,我们可能第一个想法就是利用排序,...
  • qq_28194557
  • qq_28194557
  • 2017-05-05 15:38:38
  • 1056

排序算法(归并排序, 快速排序, 堆排序)

算法思想:       归并排序:       利用分治法,   每次将数组一分为二,  生成子数组,  分别对子数组排序,   在对排好序的子数组进行合并,  直到生成 有序的完整数组为止.   ...
  • u010506130
  • u010506130
  • 2016-08-10 08:47:47
  • 592

各种排序算法的优缺点

1.插入排序 基本思想:     将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个...
  • u010817474
  • u010817474
  • 2015-09-14 09:45:59
  • 5325

六大经典排序算法 java 选择排序、插入排序、冒泡排序、快速排序、堆排序、归并排序,六大经典排序算法,

1. [文件] ChaRuFa.java ~ 890B     下载(71)      ? 1 2 3 4 5 6 7 8...
  • Smurfs___zmy
  • Smurfs___zmy
  • 2016-11-04 08:54:36
  • 624

几种排序算法的代码实现

  • 2012年05月30日 12:20
  • 82KB
  • 下载

六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。

  • 2017年12月04日 21:28
  • 510KB
  • 下载

7种常用排序算法实现(C++)(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序)

  • 2014年04月11日 22:46
  • 525KB
  • 下载

数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)

最近复习了一些排序算法,在这进行一个总结。
  • dabusideqiang
  • dabusideqiang
  • 2014-04-11 22:20:25
  • 1803

常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)

这篇博客主要实现一些常见的排序算法。例如: //冒泡排序 //选择排序 //简单插入排序 //折半插入排序 //希尔排序 //归并排序 //双向的快速排序 //单向的快速排序 //...
  • Chengzi_comm
  • Chengzi_comm
  • 2016-05-16 22:27:55
  • 6478
    个人资料
    等级:
    访问量: 8524
    积分: 281
    排名: 27万+
    文章分类
    最新评论