这是我的代码:
#include <stdio.h>
#define SIZE 4
int main(int argc, const char * argv[])
{
double m[SIZE],tmp;
int i,min,max,c,k,l,pos;
for (i=0; i<SIZE; i++) {
printf("a%d? ",i);
scanf("%lf",&m[i]);
}
for (i=0; i<SIZE; i++)
printf("%.1lf ",m[i]);
printf("\n");
k = 1;
//========================
do {
min = 0;
max = k-1;
do
{
c = (min+max)/2;
if (m[c]>m[k])
{
min=c;
}
else {
max=c;
}
c = (min+max)/2;
}
while(min != c);
pos = min;
if(m[pos]<m[k])
{
pos++;
}
tmp = m[k];
l=k;
while (l>pos) {
m[l]=m[l-1];
l--;
}
m[pos]=tmp;
k++;
} while (k != SIZE);
for (i=0; i<SIZE; i++)
printf("%.1lf ",m[i]);
//========================
return 0;
}
有人可以帮忙,为什么排序不起作用?正如我所想,代码是正确的。也许我对算法不满意?
我正在尝试使用二进制插入排序。或者有人可以提供 C 代码替代方案(看看什么是不正确的)?