设为首页 加入收藏

TOP

堆排序(非递归) (一)
2014-11-24 00:36:33 来源: 作者: 【 】 浏览:108
Tags:排序

以下代码经测试,排序5000000(五千万)int型数据没有问题!


第一个参数是数组首地址
第二个参数是数组元素个数
void HeapSort(int * const arr, const DWORD number)//堆排序
{
int tmp;
DWORD tmpIndex;
DWORD i=1;
DWORD num;
DWORD indexUp;
DWORD indexDown;
if (number < 2)
{
return;
}
indexUp = number-1;
if (0 != (indexUp%2))
{
tmpIndex = (indexUp - 1) / 2;
if (arr[indexUp] > arr[tmpIndex])
{
tmp = arr[indexUp];
arr[indexUp] = arr[tmpIndex];
arr[tmpIndex] = tmp;
}
indexUp--;
}
for (; indexUp>0; indexUp-=2)
{
tmpIndex = (indexUp / 2) - 1;
if (arr[indexUp-1] >= arr[indexUp])
{
if (arr[indexUp-1] > arr[tmpIndex])
{
tmp = arr[indexUp-1];
arr[indexUp-1] = arr[tmpIndex];
arr[tmpIndex] = tmp;
indexDown = indexUp-1;
}
else
{
continue;
}
}
else
{
if (arr[indexUp] > arr[tmpIndex])
{
tmp = arr[indexUp];
arr[indexUp] = arr[tmpIndex];
arr[tmpIndex] = tmp;
indexDown = indexUp;
}
else
{
continue;
}
}
while ((2*indexDown) < number)
{
tmpIndex = 2*indexDown +1;
if (arr[tmpIndex] >= arr[tmpIndex+1] || (tmpIndex+1 == number))
{
if (arr[tmpIndex] > arr[indexDown])
{
tmp = arr[indexDown];
arr[indexDown] = arr[tmpIndex];
arr[tmpIndex] = tmp;
indexDown = tmpIndex;
}
else
{
break;
}
}
else
{
if ((arr[tmpIndex+1] > arr[indexDown]) && (tmpIndex < number))
{
tmp = arr[indexDown];
arr[indexDown] = arr[tmpIndex+1];
arr[tmpIndex+1] = tmp;
indexDown = tmpIndex+1;
}
else
{
break;
}
}
}
}
tmp = arr[0];
arr[0] = arr[number-1];
arr[number-1] = tmp;

for (num=number-1; num>1; num--)
{
for (indexDown=0; (2*indexDown +1) < num; )
{
tmpIndex = 2*indexDown +1;
if (arr[tmpIndex] >= arr[tmpIndex+1])
{
if (arr[tmpIndex] > arr[indexDown])
{
tmp = arr[indexDown];
arr[indexDown] = arr[tmpIndex];
arr[tmpIndex] = tmp;
indexDown = tmpIndex;
}
else
{
break;
}
}
else
{
if ((arr[tmpIndex+1] > arr[indexDown]) && (tmpIndex+1 < num))
{
tmp = arr[indexDown];
arr[indexDown] = arr[tmpIndex+1];
arr[tmpIndex+1] = tmp;
indexDown = tmpIndex+1;
}

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CSDN 讨论的找出缺失数的方法记录 下一篇归并排序(非递归)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: