折半排序
程序员文章站
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;
}