gpt4 book ai didi

c - 数组的二进制插入排序不起作用(C 代码)

转载 作者:行者123 更新时间:2023-11-30 19:49:44 24 4
gpt4 key购买 nike

这是我的代码:

#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 代码替代方案(看看什么是不正确的)?

最佳答案

插入排序的抽象算法是:

function insertionSort(array A)
for i from 1 to length[A]-1 do
value := A[i]
j := i-1
while j >= 0 and A[j] > value do
A[j+1] := A[j]
j := j-1
done
A[j+1] = value
done

C中实现,我们有:

    void binaryInsertionSort (int a[], int n)
{
register int i, m;
int hi, lo, tmp;

for (i = 1; i < n; i++) {
lo = 0, hi = i;
m = i / 2;

do {
if (a[i] > a[m]) {
lo = m + 1;
} else if (a[i] < a[m]) {
hi = m;
} else
break;

m = lo + ((hi - lo) / 2);
} while (lo < hi);

if (m < i) {
tmp = a[i];
memmove (a + m + 1, a + m, sizeof (int) * (i - m));
a[m] = tmp;
}
}
}

关于c - 数组的二进制插入排序不起作用(C 代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com