选择排序_堆排序
2012-09-13 20:59
176 查看
程序代码:
void HeapAdjust(Elem R[],int s,int m)
{
rc = R[s];
for(i = 2*s;i <= m; i++) //查找rc应插入的位置
{
if((i < m && R[i]<R[i+1])
i++; //i为左右子树较大记录的下标
if(rc > R[i])
break;
R[s] = R[i];
s = i;
}
R[s] = rc;
}
void HeapSort(Elem R[],int n)
{
for(i = n/2;i > 0 ;i--) //建立大顶堆
HeapAdjust(R,i,n);
for(i = n;i > 1;i--)
{
swap(R[1],R[i]); //将堆顶记录和当前未经排序子序列R[1,--,i]中的最后一个记录交换
HeapAdjust(R,1,i-1); //对R[1]进行筛选,选出未排序子序列R[1,--,i]中的最大值
}
}
时间复杂度:O(nlogn)。
稳定性:不稳定。
void HeapAdjust(Elem R[],int s,int m)
{
rc = R[s];
for(i = 2*s;i <= m; i++) //查找rc应插入的位置
{
if((i < m && R[i]<R[i+1])
i++; //i为左右子树较大记录的下标
if(rc > R[i])
break;
R[s] = R[i];
s = i;
}
R[s] = rc;
}
void HeapSort(Elem R[],int n)
{
for(i = n/2;i > 0 ;i--) //建立大顶堆
HeapAdjust(R,i,n);
for(i = n;i > 1;i--)
{
swap(R[1],R[i]); //将堆顶记录和当前未经排序子序列R[1,--,i]中的最后一个记录交换
HeapAdjust(R,1,i-1); //对R[1]进行筛选,选出未排序子序列R[1,--,i]中的最大值
}
}
时间复杂度:O(nlogn)。
稳定性:不稳定。
相关文章推荐
- (一)选择排序之一:堆排序
- 排序之选择排序、堆排序、归并排序、快速排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)
- 选择排序与堆排序
- 选择排序 堆排序
- 选择排序之堆排序Java实现
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 冒泡排序,选择排序,快速排序,堆排序与二分查找算法
- 2 -- 选择排序之堆排序
- 第十六周项目1-验证算法选择排序之堆排序
- 百万数据排序:优化的选择排序(堆排序)
- 选择排序------堆排序
- 8.2 内部排序法---选择类排序(简单选择、堆排序)
- 数据结构与算法从零开始系列:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、基数排序
- 名称:选择排序---简单选择排序和堆排序
- 选择排序----直接选择排序与堆排序
- 排序大全【各种排序】:直接插入,折半插入,冒泡,快排,简单选择,堆排序,归并排序
- 第十六周项目1-(6)验证算法选择排序之堆排序
- 排序算法--选择排序(简单选择排序、堆排序)java实现