常见排序算法的实现

来源:互联网 发布:推荐算法 pdf 编辑:程序博客网 时间:2024/05/21 18:37

            闲着无聊,用c++实现几个排序,代码如下:

一、冒泡排序

void bubbleSort(std::vector<int> vec){if (vec.empty()) return;for (int i = 0; i < vec.size(); i++){for (int j = vec.size() - 1; j > i; j--){if (vec.at(j) < vec.at(j - 1)){swap(vec[j], vec[j - 1]);}}}}

中心思想:冒泡排序很简单,从后往前相邻两个数字作比较,把较小的数字排在前边。两层循环,外层保证遍历容器内所有数字作为主对比对象,和未被选定的其他元素(内层循环保证)对比较。

二、快速排序        

void quickSort(std::vector<int> vec,int beginPos,int endPos){if (vec.empty() || beginPos >= endPos) return;int low = beginPos;int high = endPos;int flag = vec.at(low);while (low < high){while (low < high && vec.at(high) >= flag){high--;}swap(vec[low], vec[high]);while (low < high&&vec.at(low) <= flag){low++;}swap(vec[low], vec[high]);}quickSort(vec, beginPos, low - 1);quickSort(vec, low + 1, endPos);}
中心思想:快速排序用到的主要思想是递归。在数组中选择一个数字作为筛选条件,这里选择第一个数字;然后分别从后向前h(下标大的位置向下标小的位置,用high表示)和从前往后(用low表示)和选定作为筛选条件的元素比较大小,大的放前边(或后边),小的放在另一边;直到low和high相遇。然后分别在筛选出来的区间重复上边的操作,直到每个区间都只剩一个数字。