#include <stdio.h>
int arr[] = {14,10,11,5,6,15,0,15,16,14,0,8,17,15,7,19,17,1,18,7};
/* swap函数:交换v[k]与v[j]的值 */
inline void swap(int v[], int k, int j)
{
int temp;
temp = v[k];
v[k] = v[j];
v[j] = temp;
}
void qsort(int v[], int left, int right)
{
int j, last;
if (left >= right) /* 若数组包含的元素个数少于两个 */
return; /* 则不执行任何操作 */
swap(v, left, (left + right)/2); /* 将划分子集的元素移动到V[0] */
last=left; /* 用last记录中比关键字小间的最右位置*/
for (j = left+1; j <= right; j++) /* 划分子集 */
{
if (v[j] < v[left])
{
swap(v, ++last, j);
}
}
/*通过上述过程会形成 关键字(中left所在位置) 小小小...(last所在位置)大大大大(最后)*/
swap(v, left, last); /* 恢复划分的元素 */
/*小小。。。。关键字大大大大*/
qsort(v, left, last-1);
qsort(v, last+1, right);
}
void main()
{
int j;
qsort(arr, 0, 19);
for(j=0; j<=19; j++)
{
printf("%d ", arr[j]);
}
printf("\n");
}