快速排序的思想总结,易于理解
#define _CTR_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
//快速排序
/*
* 快速排序=挖坑填数+分治法
* 分治法的基本思想:
* 1.先从数列中取出一个数作为基准数
* 2.分区过程,将比这个数大的数全放到它右边,小于或等于它的数全放到它的左边
* 3.再对左右区间重复第二步,直到各区间只有一个数
*/
void quickSort2(int arr[], int l, int r)
{
//递归结束时的条件
if (l >= r)
{
return;
}
int i = l;//开始位置
int j = r;//最后一个元素的位置
//基准数
int tmp = arr[i]; //循环判断
while (i < j)
{
while (i < j && tmp <=arr[j])
{
j--;
}
if (i < j)
{
arr[i] = arr[j];
i++;
}
while (i < j && tmp >= arr[i])
{
i++;
}
if (i < j)
{
arr[j] = arr[i];
j--;
}
}
//i j相遇 i==j
//填坑
arr[i] = tmp;
//拆分左半部分
quickSort2(arr, l, i - 1);
//右边
quickSort2(arr, i + 1, r);
}
#if 0
int main()
{
int array[] = { 1,5,7,9,8,4,3,5,12,10,9 };
int len = sizeof(array) / sizeof(array[0]);
cout << "快速排序前:";
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
quickSort2(array, 0, len - 1);
cout << "快速排序后:";
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
#endif