//快速排序一是不是在语法上注意的更多 更容易错误???
//比较和体会两种算法的区别
//2012年4月11日 16:39:46
void quickSort(int list[],int left,int right)//快速排序一
{
int i;
int j;
int pivot;
if( left<right)
{
i=left;
j=right+1;//以下i++,j--了一次,i是需要首先+1,但j不需要,所以此处需要提前+1,抵消
pivot=list[left];
do{
do{
i++;
}while(list[i] < pivot);//第一次之后只有小于哨兵才+1,利于交换操作
do{
j--;
}while(list[j] > pivot);
if(i<j)
{
int temp=list[i];
list[i]=list[j];
list[j]=temp;
}
}while(i<j);//一般情况结束时left...j,i...right [j]<pivot,[i]>pivot所以交换left和j,
//特殊情况结束时left......right,i=j=right+1//1,2,3,4,5,6,7
//即结束时,i后的都大于pivot,j前的都小于pivot,其中[j]<pivot,[i]>pivot
if(1)
{
int temp=list[left];
list[left]=list[j];
list[j]=temp;
}
quickSort(list,left,j-1);
quickSort(list,j+1,right);
}//if( left<right)
}
void quickSort_(int list[],int left,int right)//快速排序二
{
int i=left;
int j=right;
int temp=list[left];
while(i<j)
{
while(i<j&&list[j]>temp)
{
j--;
}
if(i<j)
{
list[i]=list[j];
i++;
}
while(i<j&&list[i]<temp)
{
i++;
}
if(i<j)
{
list[j]=list[i];
j--;
}
}
list[i]=temp;
if(left<i)//体会与快速排序一的区别
quickSort_(list,left,i-1);
if(j<right)//
quickSort_(list,j+1,right);
}