方法一:定义左右两个指针
#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;
}
转载于:https://blog.51cto.com/fengbaoli/1710329