方法一:定义左右两个指针

#include<stdio.h>

void QuickSort(int arr[],int start,int end)
{
	int left = start;
	int right = end;
	int tmp = arr[start];
	while(left < right)
	{
		while(left < right && arr[right] > tmp)
		{
			right--;
		}
		if(left < right)
		{
			arr[left] = arr[right];
		}
		while(left < right && arr[left] < tmp)
		{
			left++;
		}
		if(left < right)
		{
			arr[right] = arr[left];
		}
		arr[left] = tmp;
		QuickSort(arr,start,left-1);
		QuickSort(arr,left+1,end);
	}
}
int main()
{
	int arr[] = {5,3,8,2,6,7,4,1,9};
	int ret = sizeof(arr)/sizeof(arr[0]);
	int i = 0;
	QuickSort(arr,0,ret-1);
	for(i = 0; i <ret; i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

方法二:快慢指针

#include<stdio.h>


void myswap(int *left, int * right)

{

int tmp = *left;

*left = *right;

*right = tmp;

}


void QuickSort(int arr[],int start,int end)

{

int prve = start;

int cur = start + 1;

int tmp = arr[start];

int i = 0;

    if(start < end )

{

while(cur <= end)

{

if(arr[cur] < tmp)

{

prve++;

myswap(&arr[cur],&arr[prve]);

}

cur++;

}

for(i = start; i < prve; i++)

{

arr[i] = arr[i+1];

}

arr[prve] = tmp;

QuickSort(arr,start,prve-1);

QuickSort(arr,prve+1,end);

}

}

int main()

{

int arr[] = {5,3,8,2,6,7,4,1,9};

int ret = sizeof(arr)/sizeof(arr[0]);

int i = 0;

QuickSort(arr,0,ret-1);

for(i = 0; i <ret; i++)

{

printf("%d ",arr[i]);

}

return 0;

}