Tag: 排序

Mergesort – 分段故障

代码目录结构, ./Computing$ ls -LR .: list file.txt mergeSort.c program.exe type.h ./list: arrayImpl.c linkedListImpl.c list.h 编制程序: $./Computing gcc -Wall -Werror -DARRAY -I. mergeSort.c ./list/*.c -o program 这是包含文件的完整代码, mergeSort.c , list/* , type.h 使用List的给定表示, typedef struct List{ void **array; /* Housekeeping – Array enhancement/shrink */ int lastItemPosition; int size; }List; mergesort在list->array下面执行,其中aux维护array的浅表副本 void mergeSort(List *list, size_t listSize, isLess […]

将’int’赋值给’int ‘的不兼容类型

以下C代码给出错误: incompatible types in assignment of ‘int’ to ‘int [(((sizetype)(((ssizetype)m) -1)) 1)]’ 在我调用递归函数的行上: int mergeSort(int arr[], int n) { if (n > 1) { int m = (int)(n / 2); int A1[m]; // array 1 –> 1 TO M int A2[nm]; // array 2 –> M + 1 TO N int temp = m+1; for […]

在C中按字母顺序从文件中排序结构

有必要对字段上的结构进行排序(char last_name [256];)结构Pers并在控制台中显示用户。 怎么做? 先感谢您。 有这样的结构(嵌套): struct Pers { int id; char first_name[256]; char last_name[256]; struct { int age; int status; } st; } Pers; struct Pers sw[2]; char i=0; 从文件和输出中读取如下所示:所有内容都按照从文件中读取的顺序显示 FILE *file; file = fopen(“1.txt”, “r”); while ( fscanf(file, “%d%s%s%d%d”, &sw[i].id,sw[i].first_name,sw[i].last_name,&sw[i].st.age,&sw[i].st.status) != EOF) { printf(“%d %s %s %d %d\n”, sw[i].id, sw[i].first_name, sw[i].last_name, sw[i].st.age, sw[i].st.status); […]

相对于另一个arrays重新排列数组

我有两个并行的数组: defenders = {1,5,7,9,12,18}; attackers = {3,10,14,15,17,18}; 两者都是排序的,我想要做的是重新排列防御arrays的值,以便他们赢得更多的游戏(防御者[i]>攻击者[i])但我在如何交换防守arrays中的值时遇到问题。 所以实际上我们只针对攻击者使用防御arrays。 我有这个,但如果有的话,它没有太大的变化,我很确定我做得不对。 它被认为是一种powershell方法。 void rearrange(int* attackers, int* defenders, int size){ int i, c, j; int temp; for(i = 0; i<size; i++){ c = 0; j = 0; if(defenders[c]<attackers[j]){ temp = defenders[c+1]; defenders[c+1] = defenders[c]; defenders[c] = temp; c++; j++; } else c++; j++; } } 编辑:之前我确实问过这个问题,但我觉得好像我措辞严厉,并且不知道如何“碰撞”旧post。

结构数组在排序时给出错误的输出

1)我有一个结构 struct node { char symbol; int freq; int left, right,root; int value; short is_sorted; }; struct node data[1000]; 其中,通过从文件“Input.txt”作为唯一参数读取以下字母符号(符号)(abcdef)值来获得数据[215] .freq(频率){0,1,2,3,4,5}。现在我必须添加这个数组的两个最小频率,然后定位在同一个数组中获得的新元素,这样它将保持freq的增加顺序(它已经是排序数组,见我们有0,1,2,3 ,4,5)。 (2)我还必须注意两个最小添加元素不能再参与分类和添加,如果已经添加它们,它们必须固定在它们的位置一次,但是通过添加新获得的元素可以参与其中再次排序。 例如:我们添加两个最小元素0和1,0 + 1 = 1,因此“1”是通过加法获得的结果,现在这个“1”必须位于data [] .freq中,这样仍然应该有增加的顺序。 所以: data[i].freq = 0 1 1(added here) 2 3 4 5 现在我们必须再次找到最少两个节点(请再次阅读评论(2)以便了解。)我们不能再添加0 abnd 1,因为他们已经参与了添加。 所以这次我们将添加1和2(这个是在索引3,请不要与索引2处的那个混淆)。 所以我们得到1 + 2 = 3 0 1 1 2 3 […]

冒泡排序双链表

我的双链表的泡泡分拣function有问题。 当我以单链接的方式对节点进行排序时(仅使用 – > next),它正在工作,但我无法使用 – > prev指针。 这是我正在使用的代码: void sort(int count) { struct data *tmp,*current,*nextone; int i,j; for(i=0;i<count;i++) { current = first; for(j=0;jnumber > current->next->number) { nextone = current->next; current->next = nextone->next; nextone->next = current; if(current == first) { first = nextone; current = nextone; } else { current = nextone; tmp->next = nextone; […]

将数组重新排列为与另一个数组相比最佳

我已经达到了我的程序中最简单的部分,但我有点迷失,关于我如何能够做到这一点并同时保持高效。 attacker= {3,10,14,15,17,18}; defender = {1,5,7,9,12,18}; 所以这两个都是两个长度相同的数组,也是排序的。 为了将其置于上下文中,两个数组中的数字表示用户输入的滚动。 除了这种风险之外,允许防守者重新安排他的arrays,以便他可以赢得更多的战斗。 如果他愿意,他可以将5和3配对。 我迷失了如何做到这一点,而不是非常低效或容易出错。

C中的钻石arrays排序

我在C中有以下作业。我基本上需要一种方法而不是解决方案。 我们有一个13 x 13arrays。 在arrays中,我们需要考虑钻石形状。 钻石之外的所有东西都被初始化为-1(不重要)。 示例5 x 5arrays – xx 1 xxx 2 2 2 x 3 3 3 3 3 x 4 4 4 x xx 5 xx x=-1 现在在这个数组中,每个条目的菱形中的值包含11位。 5 lsb包含一个数据(色调),另外6个包含另一个数据(直径)。 我们需要逐行地对数据进行排序,对于色调进行单调排序,然后逐列地对直径进行单调排序。 这样做最有效和最节省内存的方法是什么? 因为我们需要保存这个,所以最好是交换条目而不是创建另一个数组。 最后,我们将得到一个排序的钻石arrays(仍然是-1s)。 非常感谢你们!

在c中对双向链表进行排序

我想在插入元素时按排序顺序保留链表(列表中大约200000个元素),您可以推荐哪种算法? 我使用插入排序做了一个简单的实现,但它的性能非常糟糕(很多CPU使用率)。 谢谢你的帮助。 我在合并排序和插入排序之间进行了一些比较,但似乎插入排序具有更好的性能,我对这个结果有点困惑。 你能告诉我什么是错的,是否有更好的算法? 我的代码(为简单起见,我省略了节点结构中的prev节点): struct node { int number; struct node *next; }; 插入排序: void insert_node(int value) { struct node *new_node = NULL; struct node *cur_node = NULL; struct node *last_node = NULL; int found; /* 1 means found a place to insert the new node in, 0 means not*/ new_node = (struct […]

在c中对2维数组进行排序

我正在尝试对二维数组进行排序。原始数组是 5 0 3 4 1 2 3 1 1 4 2 2 3 3 1 排序时,应该是这样的 3 1 1 3 3 1 4 2 2 4 1 2 5 0 3 这是我用来尝试实现冒泡排序的代码,我代表行数。 int x,y,z,j,temp1,temp2,temp3; for(x=0;x<i;x++) { for (j=0;ja[j+1][0]) { temp1=a[j][0]; temp2=a[j][1]; temp3=a[j][2]; a[j][0]=a[j+1][0]; a[j][1]=a[j+1][1]; a[j][2]=a[j+1][2]; a[j+1][0]=temp1; a[j+1][1]=temp2; a[j+1][2]=temp3; } } } 它仍然没有排序,任何帮助将不胜感激。