需要手写的算法之-----堆排序算法

来源:互联网 发布:红酒网络推广 编辑:程序博客网 时间:2024/06/05 00:46
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;}

0 0
原创粉丝点击