void Adjust(int * arr, int m, int len)
{
int left = 2 * m + 1;
int right = 2 * m + 2;
int max = m;
if (left<len&&arr[left]>arr[max])
{
max = left;
}
if (right<len&&arr[right]>arr[max])
{
max = right;
}
if (m!=max)
{
swap(arr[m], arr[max]);
Adjust(arr, max, len);
}
}
void HeadSort(int * arr,int n)
{
for (int i = (n - 1) / 2; i >= 0; i--)
{
Adjust(arr, i, n);
}
for (int i = n - 1;i>0;i--)
{
swap(arr[0], arr[i]);
Adjust(arr, 0, i);
}
}
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
arr[i] = rand()%10;
}
for (int i = 0; i < 10; i++)
{
printf("%d\n", arr[i]);
}
printf("-------\n");
HeadSort(arr, 10);
for (int i = 0; i < 10; i++)
{
printf("%d\n", arr[i]);
}
system("pause");
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布