#include <iostream>
using namespace std;
void swap(int & a, int & b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
return;
}
int partition(int data[], int start, int end)
{
if (data == nullptr)
{
throw exception("invalid input");
}
int small = start - 1;
int mid = data[start]; //设置哨兵,可随意选取,此处可优化,避免选取最后一个或最前一个,尽量选取中部
for (int i = start; i < end; i++)
{
if (data[i] < mid) //<和<=都可以
{
small++; //此处判断small和i可省略一次交换,例如第一个参数就小于mid的情况下
swap(data[small], data[i]);
}
}
small++;
swap(data[small], mid);
return small;
}
void quick_sort(int data[], int start, int end)
{
if (start == end)
{
return;
}
int mid = partition(data, start, end);
quick_sort(data, start, mid - 1);
quick_sort(data, mid + 1, end);
}
方法二
int partition2(int a[], int p, int r)
{
int key = a[p];
while (p < r)
{
while (p < r && a[r] > key)
{
r--;
}
if (p < r)
{
a[p] = a[r];
}
while (p < r && a[p] < key)
{
p++;
}
if (p < r)
{
a[r] = a[p];
}
}
a[r] = key;
return r;
}
void quick_sort2(int a[], int p, int r)
{
int middle;
if (p < r)
{
middle = partition2(a, p, r);
quick_sort2(a, p, middle - 1);
quick_sort2(a, middle + 1, r);
}
}
};
int main()
{
Solution s;
s.cplus_solution();
return 0;
}