#include <stdio.h>
#pragma warning(disable:4996)
void quicksort(int *arr, int left, int right)
{
if (left>right)
{
return;
}
int l = left;
int r = right;
int key = arr[left];
while (l!=r)
{
while (arr[r] >=key&&l<r)
{
r--;
}
while (arr[l]<=key&&l<r)
{
l++;
}
if (l < r)
{
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
}
arr[left] = arr[l];
arr[l] = key;
quicksort(arr, left, l - 1);
quicksort(arr, l + 1, right);
}
int main()
{
int arr[] = {
6, 1, 2,7,9,3,4,5,10,8 };
int n = sizeof(arr) / sizeof(int);
int left = 0;
int right = n - 1;
quicksort(arr, left, right);
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
第一次循环结束之后,left和right指向同一位置,此时数列的顺序:
之后进行函数的递归调用!
最终快速排序实现!