编译器未报错,但是为什么没有正确由小到大的排序呢?
#include <stdio.h>
#include <stdbool.h>
bool less(int a,int b);
void Merge(int *a,int lo,int mid,int hi);//lo相当于left,hi相当于right。
void Sort(int *a,int lo,int hi);
int main()
{
int i;
int a[20]={1,4,3,5,7,8,5,4,7,9,11,43,54,32,56,234,6434,34,323,76,};
int length=20;
int lo=0;
int hi=length-1;
Sort(a,lo,hi);
for(i=0;i<length;i++)
printf("%d ",a[i]);
return 0;
}
bool less(int a,int b)
{
return a<=b;
}
void Merge(int *a,int lo,int mid,int hi)
{
int aux[20];
int k;
int i=lo;
int j=mid+1;
for(k=lo;k<=hi;k++)
aux[k]=a[k];
for(k=lo;k<=hi;k++){
if(i>mid){
a[k]=aux[j++];
}else if(j>hi){
a[k]=aux[i++];
}else if(less(aux[j],aux[i])){
a[k]=aux[j++];
}else{
a[k]=aux[i++];
}
}
return;
}
void Sort(int *a,int lo,int hi)
{
if(lo<=hi) return;
int mid=lo+(hi-lo)/2;
Sort(a,lo,mid);//左半边排序
Sort(a,mid+1,hi);//右半边排序
Merge(a,lo,mid,hi);
return;
}
最后的输出仍然是原数组a的初始化数据,我甚至在想是不是根本没有比较。求指正。