今天看了个快排,自己通过理解之后用笔算了一下,跟答案比都不一样,原来都在一个地方上面搞错,现在讲代码贴出了给大家看看:
#include #include void improveqsort(int *list,int m,int n){ int i,j,k,t; for(i = 0;i < 7;i++) printf("%7d",list[i]); printf("\n\n"); if(m < n) { i = m;j = n + 1;k = list[m];printf("Key: %d\n",k);while(i < j){ for(i = i + 1;i < n;i++)//左边开始查看比关键字大的值 if(list[i] >= k) break; for(j = j -1;j > m; j--)//右边开始查看比关键字小的值 if(list[j] <= k) break; if(i < j) { t = list[i];list[i] = list[j];list[j] = t; }}//while //跟最后一个比关键字小的值换 t = list[m]; list[m] = list[j]; list[j] = t; improveqsort(list,m,j -1); improveqsort(list,i,n); }//if(m < n)}int main(){ int list[10]; int n = 6,m = 0,i; printf("int put 8 numbers: "); for(i = 0 ;i < 7;i++) scanf("%d",&list[i]); printf("\n"); improveqsort(list,m,n); for(i = 0;i < 7;i++) printf("%7d",list[i]); printf("\n\n"); return 0;}