选择排序 堆排序

来源:互联网 发布:世界域名 编辑:程序博客网 时间:2024/04/29 06:04

选择排序算法有简单选择排序,堆排序算法,堆排序是对简单选择排序的改进

今天动手实现了一下简单选择排序算法

假设数组是从下标0开始的。

void Sift(vector<int> & nums, int i, int end){// i 要调整的结点位置, end 待调整序列结束位置int j = 2 * i + 1;while (j <= end) {//这里很巧妙,j指向两个孩子中的较大者if (j < end && nums[j] < nums[j + 1]) ++j;if (nums[i] < nums[j]){std::swap(nums[i], nums[j]);}// 上面只交换了i,j,另一个孩子没有动,说明它还是堆结构,所以这里接着调整ji = j; j = 2 * j + 1;}}void heapSort(vector<int> &v){// 初始建堆for (int i = v.size() / 2; i >= 0; --i)Sift(v, i, v.size() - 1);// 调整堆for (int i = v.size() - 1; i > 0; --i){swap(v[0], v[i]);Sift(v, 0, i - 1);}}



0 0
原创粉丝点击