首页 > 代码库 > 堆排序算法
堆排序算法
/* date:2014.12.15
堆结构:是一种树结构,准确说为完全二叉树。在这个树中,每个节点对应原始数据的一个记录,且满足一下条件:1.如果按照从小到大的顺序排序,要求非叶节点的数据要大于或等于其左右子节点的数据;2.如果按照从大到小的顺序排序,要求非叶节点的数据要小于或等于其左右子节点的数据。
堆排序思路:基于选择排序的思想,利用堆结构和二叉树的一些性质来完成数据的排序。
流程:1).构造堆结构,把原始的无序数据按前面堆结构的定义进行调序;
2).堆排序输出。
时间复杂度:最差O(nlog2(n)),平均O(nlog2(n)).
空间复杂度:O(1).
是一种 不稳定 的排序算法.
int i,j,h,k,temp;
for (i = (n / 2) - 1;i >= 0;i --)
{
while (2 * i + 1 < n)
{
j = 2 * i + 1;
if ((j + 1) < n)
{
if (arr[j] < arr[j + 1])
{
j ++;
}
}
if (arr[i] < arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i = j;
}
else
{
break;
}
}
{
printf("%d ",arr[h]);
}
printf("\n");
for (i = n - 1;i > 0;i --)
{
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
k = 0;
while (2 * k + 1 < i)
{
j = 2 * k + 1;
if ((j + 1) < i)
{
if (arr[j] < arr[j + 1])
{
j ++;
}
}
if (arr[k] < arr[j])
{
temp = arr[k];
arr[k] = arr[j];
arr[j] = temp;
k = j;
}
else
{
break;
}
}
printf("第 %d 次排序结果为:",n - i);
for (h = 0;h < n;h ++)
{
printf("%d ",arr[h]);
}
printf("\n");
}
堆结构:是一种树结构,准确说为完全二叉树。在这个树中,每个节点对应原始数据的一个记录,且满足一下条件:1.如果按照从小到大的顺序排序,要求非叶节点的数据要大于或等于其左右子节点的数据;2.如果按照从大到小的顺序排序,要求非叶节点的数据要小于或等于其左右子节点的数据。
堆排序思路:基于选择排序的思想,利用堆结构和二叉树的一些性质来完成数据的排序。
流程:1).构造堆结构,把原始的无序数据按前面堆结构的定义进行调序;
2).堆排序输出。
时间复杂度:最差O(nlog2(n)),平均O(nlog2(n)).
空间复杂度:O(1).
是一种 不稳定 的排序算法.
*/
void HeapSort(int *arr,int n)
{int i,j,h,k,temp;
for (i = (n / 2) - 1;i >= 0;i --)
{
while (2 * i + 1 < n)
{
j = 2 * i + 1;
if ((j + 1) < n)
{
if (arr[j] < arr[j + 1])
{
j ++;
}
}
if (arr[i] < arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i = j;
}
else
{
break;
}
}
}
printf("初始化为大顶堆为:");
for (h = 0;h < n;h ++){
printf("%d ",arr[h]);
}
printf("\n");
for (i = n - 1;i > 0;i --)
{
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
k = 0;
while (2 * k + 1 < i)
{
j = 2 * k + 1;
if ((j + 1) < i)
{
if (arr[j] < arr[j + 1])
{
j ++;
}
}
if (arr[k] < arr[j])
{
temp = arr[k];
arr[k] = arr[j];
arr[j] = temp;
k = j;
}
else
{
break;
}
}
printf("第 %d 次排序结果为:",n - i);
for (h = 0;h < n;h ++)
{
printf("%d ",arr[h]);
}
printf("\n");
}
}
堆排序算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。