您的位置:首页 > 其它

C 语言经典题目系列解决方案(10)-快排

2010-09-16 16:56 399 查看
main(){
	int i,n=10;
	int numbers[10];
	int partition(int a[],int low,int high);
	void quickSort(int a[],int low,int high);
	
	//生成数组
	for (i=0;i<n;i++){
        numbers[i]=(int)rand()%100;
		printf("%3d",numbers[i]);
		if (i==n-1) printf("/n");
	}
     
	quickSort(numbers,0,n-1);
	
	 //排序后输出
	for (i=0;i<n;i++){
		printf("%3d",numbers[i]);
	}
    getchar();
}

//一趟快排
int partition(int a[],int low,int high){
    int pivotValue;
    pivotValue=a[low];
	while(low<high){
		while(lowpivotValue)  high--;//找第一个小于“枢纽值”的,向前挪
		a[low]=a[high];
		while(low<high && a[low]<pivotValue) low++;//找第一个大于“枢纽值”的,向后挪
		a[high]=a[low];
	}
    a[low]=pivotValue;
	return low;
}

//递归快排
void quickSort(int a[],int low,int high){
     int pivotLoc;
	 if (low<high) // 长度大于1时执行。
	 {
		 pivotLoc=partition(a,low,high);
		 quickSort(a,low,pivotLoc-1);
		 quickSort(a,pivotLoc+1,high);
	 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: