编写一个实现基于数组的简单插入排序的C程序。 您的程序必须从附带的数据文件中读取整数 并使用插入排序将已排序的数据存储到数组中。如果你 必须在两个现有值之间插入一个元素,然后您还必须 使用索引> =索引移动(或移位)所有元素的元素 您希望插入新元素的位置。请注意,你可以找到 教科书和幻灯片中的插入排序算法。
这是来自文本文件的整数。这些内容彼此不同,而不是它们在这里显示的方式: 879 646 80 385 741 57 370 240 111 400 262 678 951 506 720 508 792 863 677 864 70 五 591 440 989 478 867 636 278 827 692 243 806 676 158 550 425 226 783 129 876 714 125 721 164 555 730 146 596 947 174 837 48 589 808 868 694 677 379 62 580 165 956 139 215 14 45 552 98 154 702 661 997 825 363 782 229 915 281 397 295 219 231 476 253 22 873 504 653 698 772 184 453 508 977 863 624 947 104 926
这是我现在的代码。我按顺序获取地址,但现在从文件中获取整数。当我注释掉insertSort函数时,数字打印正常,但显然不是有序的。我做错了什么?
#include <stdio.h>
#include<stdio.h>
void insertionSort(int *, int);
int main()
{
int i,num,array[1000];
FILE *fp = fopen("data_a5.txt","r");
fscanf(fp,"%d",&num);
if(fp== NULL)
{
printf("Error reading File!\n");
return;
}
while(!feof(fp))
{
fscanf(fp,"%d", &array[num]);
//printf("%d\n", array[num]);
}
insertionSort(array,num);
for(i=0;i<num;i++)
printf("%d\n",&array[i]);
fclose(fp);
return 0;
}
void insertionSort(int *value, int size)
{
int i,j,temp;
for(i = 0; i <= size; i++)
{
for(j = i; j >= 0; j--)
{
if(value[j+1]<value[j])
{
temp=value[j+1];
value[j+1]=value[j];
value[j]=temp;
}
else
break;
}
}
}
答案 0 :(得分:-1)
如果您的任务是在插入项目时对您的数组进行排序(例如,&#34;直播&#34;),您最好选择使用链接结构。
例如:
struct myinst
{
int mynum;
struct myinst *prev;
struct myinst *next;
};
有很多例子,这里有一个:Getting Started
当您插入一个新项目以使您的数组/链接列表排序时,您将浏览链接列表并找到最接近新项目的项目,然后通过创建新内存执行插入更改上一个/下一个地址现有项目,以便他们指向新项目。