我写了一个插入排序的代码,但它不是排序.. 请帮助我对我的代码进行所需的更改。 感谢x
#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 代码.. 我必须使用插入和插入排序这两个函数!
最佳答案
您错误地测试了 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]);
}
关于c - 插入排序代码使用insert和insertsort!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796349/