自己总结的快速排序的code,之前一直处于半懂状态,自己敲定代码后觉得才是真的懂了!
#include <iostream>
using namespace std;
#define maxn 65536
int arr[maxn];
void quicksort(int arr[], int begin, int end)
{
if (begin >= end)
return;
int i = begin, j = end, pivot = arr[begin];
while (i != j)
{
while (i < j && arr[j] > pivot)
--j;
if (i < j)
arr[i++] = arr[j];
while (i < j && arr[i] < pivot)
++i;
if (i < j)
arr[j--] = arr[i];
}
arr[i] = pivot;
quicksort(arr, begin, i - 1);
quicksort(arr, i + 1, end);
}
int main()
{
int n, i;
cin >> n;
for (i = 0; i < n; ++i)
cin >> arr[i];
quicksort(arr, 0, n - 1);
for (i = 0; i < n; ++i)
cout << arr[i] << " ";
cout << endl;
return 0;
}
主要思想:递归分治+两端逼近
注意其中的第一个循环是while(i!=j)的,剩余的循环多是while(i<j)的,这是平时注意不到的点,需要紧记一下!!