您的位置:首页 > 其它

堆排序

2016-05-02 23:51 330 查看
#include <iostream>
#include<algorithm>
using namespace std;
//堆排序
class HeapSort {
public:
int* heapSort(int* A, int n) {
int *B = new int
;
for (int i = n / 2 - 1; i >= 0; --i){
HeadFixDown(A, i, n - 1);
}
//a[]={3,7,8,20,17,16};
for (int i = 0; i<n; ++i){
B[i] = A[0];
swap(A[0], A[n - 1 - i]);
HeadFixDown(A, 0, n - 1 - i - 1);
}
for (int i = 0; i<n; ++i){
A[i] = B[i];
}
delete[] B;
return A;
}
/*第i次循环结果
i=0:a[]={7,16,8,20,17,3}
i=1:a[]={8,16,17,20,7,3}
i=2:a[]={16,20,17,8,7,3}
i=3:a[]={17,20,16,8,7,3}
i=4:a[]={20,17,16,8,7,3}
i=5:a[]={20,17,16,8,7,3}
*/
void HeadFixDown(int* A, int i, int n){
int j, temp;
j = i * 2 + 1;
temp = A[i];
while (j <= n){
if (j + 1 <= n && A[j + 1]<A[j])
j += 1;
if (A[j] >= temp)
break;
A[i] = A[j];
i = j;
j = i * 2 + 1;
}
A[i] = temp;
}
void swap(int& a, int &b){
int temp = a;
a = b;
b = temp;
}
};

int main(int argc, char *argv[])
{
int a[]={16,7,3,20,17,8};
int size;
HeapSort* hs = new HeapSort();
hs->heapSort(a,5);
int i;
for (i = 0; i < 5; i++)
cout << a[i] << " ";
cout << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: