void Quick_sort(int* array,int size) { int pivot; int i = 0,j = size -1,temp; if(size < 2) return; //put the pivot to the first place,that guarantee the element is pivot //when i==j pivot = array[size/2]; array[size/2] = array[0]; array[0] = pivot; while(i < j) { while((i < j) && (array[j] >= pivot)) j--; temp = array[i]; array[i] = array[j]; array[j] = temp; while((i < j) && (array[i] < pivot)) i++; temp = array[i]; array[i] = array[j]; array[j] = temp; } if((i > 0)&&(i < size - 1)) { Quick_sort(array,i); Quick_sort(array + i,size - i); } else if(i == 0) Quick_sort(array + 1,size -1); else Quick_sort(array,size-1); }
void Quick_sort(int *arr, int left, int right) { if(left < right) { int index = partition(arr, left, right); Quick_sort(arr, left, index - 1); Quick_sort(arr, index + 1, right); } }
int main(int argc,char** argv) { time_t begin_time,end_time; int *array; #ifdef DEBUG int * comparearray; //use an right answer to compare result; #endif int size = MAX_SIZE,count; char method; if(argc > 1) { if((size = atoi(argv[1])) < 0) size = MAX_SIZE; } array = malloc(sizeof(int) * size); srand(time(NULL)); for(count = 0;count < size;count++) { #ifdef DEBUG array[count] = rand()%100; #else array[count] = rand(); #endif } #ifdef DEBUG comparearray = malloc(sizeof(int) * size); memcpy(comparearray,array,sizeof(int)*size); printf("befor sort\n"); print_array(array,size); #endif print_usage(); scanf("%c",&method); switch(method) { case 's': begin_time = time(NULL); selection_sort(array,size); end_time = time(NULL); break; case 'i': begin_time = time(NULL); insertion_sort(array,size); end_time = time(NULL); break; case 'q': begin_time = time(NULL); quick_sort(array,size); end_time = time(NULL); break; case 'Q': begin_time = time(NULL); Quick_sort(array,size); end_time = time(NULL); break; case 'S': begin_time = time(NULL); shell_sort(array,size); end_time = time(NULL); break; case 'm': begin_time = time(NULL); merge_sort(array,size); end_time = time(NULL); break; default: printf("not sorted\n"); break; } #ifdef DEBUG printf("after sort\n"); print_array(array,size); compare(comparearray,size); #endif printf("time consume:%d\n",(int)(end_time - begin_time)); free(array); return -1; }