堆排序C++
来源:互联网 发布:淘宝怎么装修店铺首页 编辑:程序博客网 时间:2024/05/24 20:06
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int left(int x)
{
return (x << 1) + 1;
}
int right(int x)
{
return (x << 1) + 2;
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void MaxHeapify(int data[], int i, int n)
{
int l = left(i);
int r = right(i);
int largest = i;
if(l < n && data[largest] < data[l]) largest = l;
if(r < n && data[largest] < data[r]) largest = r;
if(largest != i)
{
Swap(&data[largest], &data[i]);
MaxHeapify(data, largest, n);
}
}
void BuildMaxHeap(int data[], int n)
{
for(int i = n / 2 - 1; i >= 0; i--)
{
MaxHeapify(data, i, n);
}
}
void HeapSort(int data[], int n)
{
if(nullptr == data || n <= 0)
{
return ;
}
int heap_size = n - 1;
BuildMaxHeap(data, heap_size);
for(int i = n - 1; i >= 1; --i)
{
Swap(&data[0], &data[i]);
BuildMaxHeap(data, heap_size);
--heap_size;
}
}
int main()
{
int mydata[10] = {2, 1, 3, 4, 6, 5, 8, 7, 10, 9};
HeapSort(mydata, 10);
for(int i = 0; i <= 9; i++)
{
cout<<mydata[i]<<" ";
}
return 0;
}
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int left(int x)
{
return (x << 1) + 1;
}
int right(int x)
{
return (x << 1) + 2;
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void MaxHeapify(int data[], int i, int n)
{
int l = left(i);
int r = right(i);
int largest = i;
if(l < n && data[largest] < data[l]) largest = l;
if(r < n && data[largest] < data[r]) largest = r;
if(largest != i)
{
Swap(&data[largest], &data[i]);
MaxHeapify(data, largest, n);
}
}
void BuildMaxHeap(int data[], int n)
{
for(int i = n / 2 - 1; i >= 0; i--)
{
MaxHeapify(data, i, n);
}
}
void HeapSort(int data[], int n)
{
if(nullptr == data || n <= 0)
{
return ;
}
int heap_size = n - 1;
BuildMaxHeap(data, heap_size);
for(int i = n - 1; i >= 1; --i)
{
Swap(&data[0], &data[i]);
BuildMaxHeap(data, heap_size);
--heap_size;
}
}
int main()
{
int mydata[10] = {2, 1, 3, 4, 6, 5, 8, 7, 10, 9};
HeapSort(mydata, 10);
for(int i = 0; i <= 9; i++)
{
cout<<mydata[i]<<" ";
}
return 0;
}
阅读全文