Tag: 合并

在链表上实现mergesort

我的任务是在用C / C ++编写的列表上实现合并排序算法。 我有一般的想法,编写我的代码并成功编译它。 但是,当我运行它时,它会开始正常,但然后挂起“准备好的列表,现在开始排序”而不会出现任何错误。 我试图查看我的代码,但我完全不知道问题是什么。 我也非常业余的调试,所以使用gdb尽我最大的能力导致我没有在哪里。 任何建议或提示都将是一个巨大的帮助,谢谢大家! #include #include struct listnode { struct listnode *next; int key; }; //Finds length of listnode int findLength (struct listnode *a) { struct listnode *temp = a; int i = 0; while (temp != NULL) { i++; temp = temp->next; } return i; } struct listnode * […]

C – 合并合并排序的一部分

我是新来合并排序,我正在尝试创建一个。 我的合并排序不是排序我发送它的数组,我无法弄清楚为什么。 这里是所有代码http://pastebin.com/M4RUzhUa的链接 这是我的mergesort函数 void merge_sort(int array[], int low, int high) { int middle = (low + high) / 2; if(low < high) { merge_sort(array, low, middle); merge_sort(array, middle+1, high); merge(array, low, middle, high); } } 这是我的(更新的)合并function void merge(int array[], int low, int middle, int high) { int size,left,right,i, j; size = high – low […]

合并两个数组并省略所有重复元素

我有2个arrays。 输入1和输入2.假设输入1具有{1,1,2,3,3,4,5},输入2具有{4,2,6,7,8}。 合并数组{1,1,2,3,3,4,5,4,2,6,7,8} 排序后我的合并数组看起来像{1,1,2,2,3,3,4,4,5,6,7,8} 我的输出应该像{5,6,7,8},因为它们是非重复元素。 它应该既没有在第一次发生两次,也没有在第一次发生一次,在第二次发生一次 我已将两个数组放入一个单独的数组中(两者合并)。 对它进行排序并删除重复项。 我得到的输出像{1,2,3,4,5,6,7,8},但我不应该得到1,2,3,4,因为它们在合并的数组中都发生了两次。 请帮我尽快完成该计划。 提前致谢。 我不能使用结构。 多数民众赞成我的任务 #include #include main() { int a[10],b[10],c[10],i,j,n,n1,temp; clrscr(); printf(“enter the no of ele in array1\n”); scanf(“%d”,&n); printf(“enter 1st array elements\n”); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("enter size of 2nd array"); scanf("%d",&n1); printf("enter 2nd array elements\n"); for(i=0;i<n;i++) { scanf("%d",&b[i]); } for(i=0;i<n;i++) { c[i]=a[i]; } j=0; […]

从一个数组合并两个int数组而不重复

我试图将两个数组合并为一个没有重复但我的代码无法正常工作。 任何人都可以建议如何解决这个问题? void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int i,j,count=0,indx=size_A; for(i=0;i<size_A;i++) { set_C[i]=set_A[i]; } for(i=0;i<size_B;i++) { for(j=0;j<size_A;j++) { if (set_B[i]!=set_C[j]) count++; } if (count==size_A){ set_C[indx]=set_B[i]; indx++; } } } 例: a{3 7 13 8 11 1 4} b{5 7 1 2 3} a_b{3 7 13 8 11 […]

使用c语言中的递归进行合并排序

#include #include int arr[20]; void main() { int n,i; clrscr(); printf(“\n\t\t\t——Merge Sorting——\n\n”); printf(“Enter the size of array\n”); scanf(“%d”,&n); printf(“Enter the elements:\n”); for(i=0; i < n; i++) { scanf("%d",&arr[i]); } merge_sort(arr,0,n-1); printf("\n\n\t\t\t—–Merge Sorted Elements—–\n\n"); printf("Sorted array:\t"); for(i=0; i < n; i++) { printf("\t%d",arr[i]); } getch(); } int merge_sort(int arr[],int low,int high) { int mid; if(low < […]

合并两个数组而不使用数组进行排序

我试图合并到数组而没有排序(添加一个然后另一个)使用指针方法,但它只是打印第一个数组,然后打印垃圾值。 我想要做的只是在一个大数组中组合2个数组。 无需排序(至少目前为止)。 void getarray(int*,int); int merge(int*,int*,int,int,int*); main() { int a[10],b[10],c[20]; int i,j,n,m,size; clrscr(); printf(“Enter no. of elements in FIRST array: “); scanf(“%d”,&n); getarray(a,n); printf(“Enter no. of elements in SECOND array: “); scanf(“%d”,&m); getarray(b,m); merge(a,b,n,m,c); printf(“\nMerged Array: \n”); for(i=0;i<n+m;i++) { printf("\t%d\t",c[i]); } getch(); return 0; } void getarray(int *x, int y) { int i; for(i=0;i<y;i++) […]

将排序的多个文件合并为1个已排序的文件

我必须将多个已排序的文件合并为1个已排序的文件。 目前我正在读取每个文件的一个数据条目(12个字节),将最大值写入输出文件并递增我从中复制数据的输入文件的指针,就像合并排序的合并步骤一样。 即 while (n){ //read one data element (12 bytes) //find maximum //write the maximum //increment file pointer containing of file containng maximum } 该过程重复n =约3000000次。 问题是需要花费大量时间(约30秒)。 我想将拍摄时间减少到10秒以下。 关于如何做到的任何想法?

从C文件调用C ++函数

我是C和C ++的新手。 但我有一些C ++函数,我需要从C调用它们。我做了一个我需要做的例子 main.c : #include “example.h” #include int main(){ helloWorld(); return 0; } example.h : #ifndef HEADER_FILE #define HEADER_FILE #ifdef __cplusplus extern “C” { #endif void helloWorld(); #ifdef __cplusplus } #endif #endif example.cpp : #include void helloWorld(){ printf(“hello from CPP”); } 它只是不起作用。 我仍然在main.c收到对_helloWorld的未定义引用的错误。 这个问题在哪里?

如何将具有不同值的两个数组合并为一个数组?

假设你有一个数组a[]=1,2,4,6 ,第二个数组b[]=3,5,7 。 合并后的结果应该包含所有值,即c[]=1,2,3,4,5,6,7 。 合并应该在不使用函数的情况下完成。