void HeapCore(vector<int > &vec ,size_t size, size_t end){
size_t i = end ;
size_t j = i ;
bool flag = false;
do{
flag = false;
if(i * 2 < size && vec[i ] > vec[i *2]){
j = i*2;
}
if(i *2 + 1 < size && vec[i*2 + 1 ] < vec[i *2] && vec[i ] > vec[i *2] ) {
j = i*2 +1;
}
if(i != j){
int tmp = vec[j];
vec[j] = vec[i];
vec[i] = tmp;
flag = true;
}
i = j;
}while(flag && i < size );
}
void Heap(vector<int >&vec){
for(size_t i = (vec.size() - 1)/2 ; i > 0 ; i--){
HeapCore(vec , vec.size() ,i);
}
//将第一个个与最后一个交换
for(size_t i = vec.size() - 1; i > 0 ; i--){
int tmp = vec[1];
vec[1] = vec[i];
vec[i] = tmp;
if(i > 1)
HeapCore(vec , i , 1);
}
}
int main(){
vector<int > vec;
for(int i = 0 ; i < 100 ; i++){
vec.push_back(i);
}
Heap(vec);
cout<<endl;
}
需要手写的算法之-----堆排序算法
最新推荐文章于 2025-03-02 14:00:04 发布