快速排序(递归)
#include <iostream>
int *parse(int *begin, int *end)
{
int temp = *begin;//存储第一个数
//寻找第一个数要分割的位置
while(begin < end)
{
while(begin < end && temp <= *end) end --;
*begin = *end;
while(begin < end && temp >= *begin) begin ++;
*end = *begin;
}
//将第一个数插入上述分割位置
*begin = temp;//此时begin=end,写成*end = temp 也可
//返回分割位置
return begin;
}
void quick_sort(int *begin, int *end)
{
if(begin < end)
{
int *flag = parse(begin, end);
quick_sort(begin, flag - 1);//分别对分割位置前后,递归寻找分割位置
quick_sort(flag + 1, end);//
}
}
int main()
{
int data[] = {49, 38, 65, 97, 76, 13, 27, 49};
quick_sort(data + 0, data + 7);
for(int i = 0; i <= 7; i ++)
{
std::cout << *(data + i) << " ";
}
std::cout << std::endl;
return 0;
}