#include?<stdio.h>
#include?<stdlib.h>
int?numbers[101],size,i;
void?C_sort(int?L,int?R){
????int?L_arrow,R_arrow,box,temp;
????if(L>R){
????????return;
????}
????box=numbers[L];
????L_arrow=L;R_arrow=R;
????printf("R_arrow=%d\n",R_arrow);
????for(i=1;i<=size-1;i++){
????????if(i==L_arrow)printf("(%d)?",numbers[i]);
????????else?if(i==R_arrow)printf("[%d]?",numbers[i]);
????????else?printf("%d?",numbers[i]);
????}
????for(i=0;i<=size-1;i++)printf("%d?",numbers[i]);
????printf("\n");
????while(L_arrow!=R_arrow){
????????while(numbers[R_arrow]>=box&&L_arrow<R_arrow){
????????????R_arrow--;
????????????printf("R_arrow=%d\n",R_arrow);
????????????for(i=0;i<=size-1;i++)printf("%d?",numbers[i]);
????????}
????????while(numbers[L_arrow]<=box&&L_arrow<R_arrow){
????????????L_arrow++;
????????????for(i=0;i<=size-1;i++)printf("%d?",numbers[i]);
????????}
????????if(L_arrow<R_arrow){
????????????temp=numbers[R_arrow];
????????????numbers[R_arrow]=numbers[L_arrow];
????????????numbers[L_arrow]=temp;
????????????for(i=0;i<=size-1;i++)printf("%d?",numbers[i]);
????????}
????????/*for(i=1;i<=size-1;i++){
????????if(i==L_arrow)printf("(%d)?",numbers[i]);
????????else?if(i==R_arrow)printf("[%d]?",numbers[i]);
????????else?printf("%d?",numbers[i]);
????????}*/
????//printf("\n");
????}
????numbers[L]=numbers[L_arrow];
????numbers[L_arrow]=box;
????for(i=1;i<=size-1;i++)printf("%d?",numbers[i]);
????printf("\n");
????C_sort(L,L_arrow-1);
????C_sort(L_arrow+1,R);
}
int?main()
{
????int?i;
????scanf("%d",&size);
????for(i=0;i<=size-1;i++)scanf("%d",&numbers[i]);
????//for(i=0;i<=size-1;i++)printf("%d?",numbers[i]);//測(cè)試代碼,此時(shí)輸出已不正常
????C_sort(0,size-1);
????for(i=1;i<=size-1;i++)printf("%d?",numbers[i]);
????system("pause");
????return?0;
}有一些是測(cè)試代碼顯示過(guò)程。編譯通過(guò),然后結(jié)果明顯錯(cuò)誤,從過(guò)程來(lái)看也沒(méi)有R_arrow的蹤跡。Why?錯(cuò)誤太隨機(jī)了??!
快速排序:莫名其妙,隨機(jī)錯(cuò)誤
bigmathbase
2017-08-13 21:30:20