1.提出问题
快速排序某个列表中的元素,按照从小到大的顺序进行排列。
2.算法分析
基于分治算法策略,设定一个基准线(pivot),将数据与基准线对比,分成大于和小于部分,把小于基准数的元素放到左边,把大于基准数的元素放到右边,通过递归操作,不断通过分治算法实现排序,不断拆分,直到将序列拆到只剩一个或者零个元素的时候排列结束。
3.实现代码
#include <iostream>
template <typename T>
void quick_sort(T* s, int l, int r);
int main()
{
int a[] = { 49, 38, 65, 97, 76, 13, 27 };
int l = 0, r = 6;
quick_sort(a, l, r);
for (int i = 0; i <= r; i++)
std::cout << a[i] << " ";
std::cout << std::endl;
return 0;
}
template <typename T>
void quick_sort(T* s, int l, int r)
{
int i, j, x;
if (l < r)
{
i = l, j = r;
x = s[i];
while (i < j)
{
while (i < j && s[j] > x)
j--; /* 从右向左找第一个小于x的数 */
if (i < j)
s[i++] = s[j];
while (i < j && s[i] < x)
i++; /* 从左向右找第一个大于x的数 */
if (i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); /* 递归调用 */
quick_sort(s, i + 1, r);
}
}
输出结果:
13 27 38 49 65 76 97