快速排序也叫做分化交换排序,是交换排序的一种。它采用一种叫做分治的策略。
步骤为:
1.从数列中挑选一个元素,称为“基准”;
2.重新排序,所有比基准小的元素排到基准前面,比基准大的元素排到基准后面;
3.递归。
快速排序是不稳定的。
#include <stdio.h>
#include <stdlib.h>
int partition(int *array,int i,int j)
{
int temp=*(array+i);
while(i<j)
{
while(i<j && *(array+j)>=temp)
{
j--;
}
if(i<j)
{
*(array+i)=*(array+j);
i++;
}
while(i<j && *(array+i)<=temp)
{
i++;
}
if(i<j)
{
*(array+j)=*(array+i);
j--;
}
}
*(array+i)=temp;
return i;
}
void quicksort(int *array,int low,int high)
{
int mid;
if(low < high)
{
mid=partition(array,low,high);
quicksort(array,low,mid-1);
quicksort(array,mid+1,high);
}
}
void main()
{
int i,n;
int array[255];
printf("请输入数据个数:");
scanf("%d",&n);
if(n<=0 || n>255)
{
printf("n is not correct!\n");
exit(1);
}
printf("请一次输入待排序的数据");
for(i=1;i<=n;i++)
{
scanf("%d",&array[i]);
}
printf("\n待排序的数组为:\n");
for(i=1;i<=n;i++)
{
printf("%d ",array[i]);
}
quicksort(array,1,n);
printf("排序后的数组为:\n");
for(i=1;i<=n;i++)
{
printf("%d ",array[i]);
}
}