快速排序
首先我们来看看百度百科上是怎么说快速排序的:
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
简单的来说,就是先确定一个key,然后分别把比key大和比key小的数分配到两边,然后递归求解,这样得到的结果一定是一个有序列。
看图理解快一点
假设一开始的序列是这样的,我们假设要排成一个递增序列,我一般都是取中间的值为key值
我们分别在key的左边和右边的序列分别设立两个指针指向头尾。
然后我们分别判断它们与key值的大小,如果beg对应的值小于key则将执行beg++,对右边的序列也一样,像是上面的图,我们不需要移动beg和end指针。然后我们交换beg和end对应的值,就有了下图
重复上一过程直到beg不小于end,然后递归key的左右两边的序列,如下图
重复刚才说的,下面就不多说了
这样我们就排序好了,原理懂了代码就简单了
void QuickSort(int arr[],int low, int high)
{
int temp;
int beg = low;
int end = high;
int mid = arr[(low + high) / 2];
do
{
while (arr[beg] < mid) //查找左半部分比mid大的数
{
beg++;
}
while (arr[end] > mid) //查找右半部分比mid小的数
{
end--;
}
if (beg <= end)
{
swap(arr[beg], arr[end]);
beg++;
end--;
}
} while (beg <= end);
if (low < end)
{
QuickSort(arr,low, end);
}
if (beg < high)
{
QuickSort(arr,beg, high);
}
}
这是我的第三篇博客了,如果有不足的地方请指出来便于我改进