数组的排序用递归思想

求以下程序的注解和分析
#include <stdio.h>

#define MAX 100
typedef struct
{
int element[MAX];
int length;
}Queue;

void swap(Queue *L, int i, int j)
{
int temp = L->element[i];
L->element[i] = L->element[j];
L->element[j] = temp;
}

int FindKey(Queue *L, int low, int high)
{
int PKey;
PKey = L->element[low];
while (low < high)
{
while (low < high && L->element[high] >= PKey)
{
high--;
}
swap(L, low, high);
while (low < high && L->element[low] <= PKey)
{
low++;
}
swap(L, low, high);
}
return low;
}
void Qsort(Queue *L, int low, int high)
{
int key;
if (low < high)
{
key = FindKey(L,low,high);
Qsort(L, low, key - 1);
Qsort(L, key + 1, high);
}
}

void QuickSort(Queue *L)
{
Qsort(L,0,L->length);
}
void Print(Queue L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d ", L.element[i]);
}
}
int main()
{
Queue L;
int d[MAX] = { 50,10,90,30,70,40,80,60,20 };
for (int i = 0; i < 9; i++)
{
L.element[i] = d[i];
}
L.length = 8;
QuickSort(&L);
Print(L);
return 0;
}