#include
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void quicksort(int k[],int s,int t)
{
int i,j=t+1;
i=s;
while(1)
{
do i++;
while(!(k[i]>=k[s]||i==t));
do j--;
while(!(k[j]<=k[s]||j==s));
if(i<j)
swap(&k[i],&k[j]);
else
break;
}
swap(&k[s],&k[j]);
quicksort(k,s,j-1);
quicksort(k,j+1,t);
}
int main()
{
int i;
int k[10]={2,5,6,3,7,8,0,9,12,1};
for(i=0;i<10;i++)
{
printf("%d ",k[i]);
}
printf("\n");
quicksort(k,0,9);
for(i=0;i<10;i++)
printf("%d ",k[i]);
}
為什麼第二個循環搞不出來。顯示不出排序後的結果
缺少結束判斷:
#include <stdio.h>
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void quicksort(int k[],int s,int t)
{
int i,j=t+1;
i=s;
if(s>=t) return; //增加
while(1)
{
do i++;
while(!(k[i]>=k[s]||i==t));
do j--;
while(!(k[j]<=k[s]||j==s));
if(i<j)
swap(&k[i],&k[j]);
else
break;
}
swap(&k[s],&k[j]);
quicksort(k,s,j-1);
quicksort(k,j+1,t);
}
int main()
{
int i;
int k[10]={2,5,6,3,7,8,0,9,12,1};
for(i=0;i<10;i++)
{
printf("%d ",k[i]);
}
printf("\n");
quicksort(k,0,9);
for(i=0;i<10;i++)
printf("%d ",k[i]);
printf("\n");
}