欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

折半排序

程序员文章站 2022-04-26 15:58:34
...
#include <stdio.h>
//创建排序方法
void CelerityRun(int left,int right,int array[]){
	int i,j;
	int middle,item;
	i=left;
	j=right;
	middle=array[(left+right)/2];//求中间值 
	do{
		while((array[i]<middle)&& (i<right)){//从左找小于中值的数 
		    i++;
		} 
		while((array[j]>middle)&&(j>left)){//从右找大于中值的数 
		    j--; 
		} 
		if(i<=j){//找到一对值 
			item = array[i];
			array[i] = array[j];
			array[j] =item;
			i++;
			j--;
		} 
	}while(i<=j);//如果两下标交错 就停止一次(完成一次) 
	//递归左半边
	if(left<j){
		CelerityRun(left,j,array);
	} 
    //递归右侧 
    	if(right>i){
		CelerityRun(i,right,array);
	} 
}
int main(){
	int i;
	int a[10];
	printf("维数组元素赋值:\n");
	for(i=0;i<10;i++){
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	//小到大排序
    CelerityRun(0,9,a); 
	//输出数组
	printf("排序后输出数组:\n");
	for(i=0;i<10;i++){
		printf("%d\t",a[i]);//输出制表位 
		if(i==4){//循环至第5个元素时 
			printf("\n");//换行输出 
		}
	} 
	return 0;
}
相关标签: 记录