长沙百度搜索网站排名,最新新闻热点事件,深圳哪里有网站建设,学校建设网站的目的基本思想
任取一个元素为中心#xff0c;所有比它小的元素一律前放#xff0c;比他大的元素一律后放#xff0c;形成左右两个子表#xff1b;对各子表重新选择中心元素并依此规则调整#xff0c;直到每个子表的元素只剩一个。 通过一趟排序#xff0c;将待排序记录分割成…基本思想
任取一个元素为中心所有比它小的元素一律前放比他大的元素一律后放形成左右两个子表对各子表重新选择中心元素并依此规则调整直到每个子表的元素只剩一个。 通过一趟排序将待排序记录分割成独立的两部分其中一部分记录的关键字都比两一部分记录的关键字小则可对这两部分记录进行排序以达到整个序列有序。 调试代码
#include iostream
#include vector
using namespace std;
int counter 0;//调试用int Partition(vectorintvec, int low, int high)
{//首先以第一个元素的值作为枢轴的值此时它所在的位置空出来然后从后往前遍历将第一个小于枢轴的值的元素放到空位int pivotVal vec[low]; // 选取第一个元素的值作为枢轴的值while (low high){while (low high vec[high] pivotVal) high--; // 从后往前遍历直到遇到比枢轴小的元素时停下swap(vec[low], vec[high]);while (low high vec[low] pivotVal) low; // 从前往后遍历直到遇到比枢轴大的元素时停下swap(vec[low], vec[high]);}vec[low] pivotVal;cout 第 counter 趟: ;for (int i 0; i 11; i)cout vec[i] ;cout endl endl;return low;
}
void quick_sort(vectorint vec, int low, int high)
{if (low high){int pivot Partition(vec, low, high); // 确定枢轴的位置quick_sort(vec, low, pivot - 1); // 对 左边子序列 递归排序quick_sort(vec, pivot 1, high); // 对 右边子序列 递归排序}
}
int main(int argc, const char* argv[])
{vectorint vec { 100, 1, 53, 5, 36, 7, 8, 109, 10, 11, 15 };cout 待排序数组: ;for (int i 0; i 11; i)cout vec[i] ;cout endl endl;quick_sort(vec, 0, vec.size() - 1);cout 结果: ;for (int i 0; i 11; i)cout vec[i] ;cout endl endl;return 0;
}