个人写的快速排序

个人写的快速排序

 

#include <stdio.h>

void getValues(int* values, int length);
void showValues(int* values,int length);
void quickSort(int* values, int start, int end);
int partition(int* valuse, int start, int end);
void exchange(int* a, int* b);

int main(int argc, char** argv){

	int values[10];
	int i;
	int length = 10;

	printf("原始数组中数值如下:\n");
	getValues(values,length);
	showValues(values,length);

	printf("快速排序后数组中数值如下:\n");
	quickSort(values,0,length-1);
	showValues(values,length);

	return 0;
}

void getValues(int* values,int length){

	//产生随机数,存储在values数组中。
	int i;
	srand ( time() );
	for(i=0;i<length;i++){		
		values[i] = rand()%10;
	}
}

//打印出数组中的数值
void showValues(int* values, int length){

	int i=0;
	while( length > 0 ){
		
		printf("values[%d] : %d",i,values[i]);
		printf("\n");

		length--;
		i++;
	}
}

//快速排序函数
void quickSort(int* values, int start, int end){

	int position;

	if(start == end) return;
	
	position = partition(values,start,end);

	if(position == start){
		quickSort(values,start+1,end);
	}

	else{
	quickSort(values,start,position-1);
	quickSort(values,position,end);
	}

}


//将数组分成两部分A、B两段,A段中的数值小于B段中的数值
int partition(int* values, int start, int end){

	int i;
	int j;
	int tmp;
	i = start;
	j = end;	
	while(i<j){
		tmp = *(values+i);
		while(*(values+j)>=tmp)j--;
		if(i<j)
			exchange(values+i,values+j);		
		while(*(values+i)<tmp)i++;
		if(i<j)
			exchange(values+i,values+j);
	}
	return i;
}

//交换指针对应的两个数值
void exchange(int* a, int* b){
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

  

你可能感兴趣的:(快速排序)