1.关于相同元素处理
4 2 4 5 4
判断语句是否等于枢纽元在
没有等于号情况下:(一次快排)
4 2 4 5 _
4 2 _ 5 4
4 2 4 5 4
有等于号情况下:(一次快排)
2 4 4 5 4
2.关于交换
选取枢纽元后(存放于data),从另一侧开始扫描,可以避免频繁数据交换,因为始终存在一个空位,直至最后i==j时将data的元素存放于a[i]
#include <stdio.h>
#define num 6
void quicksort(int a[],int left,int right)
{
if(left<right)
{
int i,j,data;
i=left;
j=right;
data=a[left];
while(i<j)
{
while(i<j && a[j]>data)//或者a[j]>=data
{
j--;
}
if(i<j)
{
a[i]=a[j];
i++;
}//向左扫描
while(i<j && a[i]<data)
{
i++;
}
if(i<j)
{
a[j]=a[i];
j--;
}//向右扫描
}//end of while
a[i]=data;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
}
int main()
{
int a[num];
int i;
for(i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
quicksort(a,0,num-1);
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
return 0;
}