您的位置:首页 > 编程语言 > C语言/C++

堆排序二

2015-10-13 23:11 253 查看
#include <iostream>

using namespace std;

void Sift(int r[], int i, int n){

int j = 2*i;
int temp;

while (j <= n){

if(j<n && r[j]<r[j+1]){
j++;
}

if(r[i] > r[j]){
break;
}
else{
temp = r[i];
r[i] = r[j];
r[j] = temp;

i = j;
j = 2*i;
}
}
}

void HeapSort(int r[], int n){

int temp;
int i;

for(i=n/2; i>=1; i--){

Sift(r, i, n);
}

for(i=1; i<n; i++){

temp = r[1];
r[1] = r[n-i+1];
r[n-i+1] = temp;

Sift(r, 1, n-i);
}
}

int main ()
{
int array[] = {0, 36, 30, 18, 40, 32, 45, 22, 50};

HeapSort(array, 8);

for (int i=1; i<=8; i++){

cout << array[i] << " " ;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 堆排序