我已经编写了一个插入排序的代码,但它是nt排序.. 请帮助我对mycode进行所需的更改。 感谢名单
#include<stdio.h>
int compare(int a,int b)
{
if(a>b)
return 1;
else if( a<b)
return -1;
else if(a==b)
return 0;
}
void insert(int m, int ms[], int size)
{
int j,k;
for (j=0; j<size; j++) // Find the right position
{ if (compare(m, ms[j])) break;
// Assertion: j is the right position for m
for (k=size-1; k>=j; k--) // Right shift values>m
ms[k+1] = ms[k];
ms[j] = m; } // Insert m
}
void insertSort(int ms[], int size)
{
int j;
// Loop Invariant:
// The sublist from ms[0] to ms[j-1] is sorted
for (j=1; j<size; j++) {
insert(ms[j], ms, j);
}
}
void main()
{
int i,arr[5]={55,66,22,44,39};
printf("sorting\n");
insertSort(arr,5);
for( i=0;i<5;i++)
{
printf("\n%d",arr[i]);
}
}
这是我的xact代码.. 我必须使用插入和插入排序两个函数!
答案 0 :(得分:0)
您正在错误地测试compare
的返回值。你可能想要这样的东西:
if (compare(m, ms[j]) <= 0) break;
此外,删除函数insert
中的花括号,它们会拧紧代码的结构。 break
后面的语句不应该在第一个循环体内。
顺便说一句,如果你使你的代码更简单,更整洁,你就不太可能犯下愚蠢的错误。正确的缩进将帮助您轻松地可视化代码的结构。例如:
void insort(int a[], int n, int e) {
int j;
for (j = n - 1; j >= 0 && a[j] > e; j--)
a[j + 1] = a[j];
a[j + 1] = e;
}
void insertion_sort(int a[], int n) {
int i;
for (i = 1; i < n; i++)
insort(a, i, a[i]);
}