예제 #1
0
파일: allsort.c 프로젝트: ruantongtong/sort
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);
}
예제 #2
0
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);
    }
}
예제 #3
0
파일: allsort.c 프로젝트: ruantongtong/sort
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;
}