快速排序
没啥好说的,算法入门必看。快排时间复杂度nlogn。
代码
void ::quickSort(int left, int right, std::vector<int>& data)
{
if(left >= right)
{
return;
}
int i = left;
int j = right;
int ref = data[left];
while(i < j)
{
while(i < j && data[j] > ref)
j --;
while(i < j && data[i] < ref)
i ++;
if(i < j)
{
m_data[i] = data[i] + data[j];
m_data[j] = data[i] - data[j];
m_data[i] = data[i] - data[j];
}
}
m_data[i] = ref;
quickSort(left, i - 1, data);
quickSort(i + 1, right, data);
}
分析如下: 给个输入 (1 5 2 3 4)
快排的核心思想就是二分法+递归。
是找一个基准位,然后把数组中的内容分成与基准数比大小分成两类。依次对每一类递归处理。
总结:
其实现实中很多问题都可以用这种思想去解决,找出统一的规律,然后分而治之,即可解决。