Tag: sort

将数字插入已排序的链接列表,为什么数字每次都插入第二个位置?

我正在开发一个关于链表的项目,我无法将数字插入到已排序的链表中。 每次插入第二个位置的数字,我无法弄清楚问题出在哪里。这是我的代码: void insertSort(struct linkedList *n,int num,int *length){ //insert number to a sort linked list node *new = (node *) malloc(sizeof(node)); //create a new node new->next=NULL; new->data = num; while(n!=NULL&&n->data > new->data){ // find which position num should insert in sorted list n = n->next; } new->next = n->next; n->next= new; length += 1; } […]

使用qsort对2D数组进行排序

我正在尝试排序2d数组。 首先,我按列排序,然后按行排序。 逐列工作但不是逐行。 这段代码有什么问题? int scmpr (const void *a, const void *b){ return strcmp((const char*)a, (const char*)b); } int main(void){ int i,j; char **tab; tab=(char**)malloc(sizeof(char*)* 10); for(i=0; i<10; i++){ tab[i]=(char*)malloc(sizeof(char)*15); } for(i=0; i<10; i++){ for(j=0; j<15; j++){ tab[i][j]=rand()%20+'b'; printf("%c ", tab[i][j]); } puts(""); } for (i = 0; i<10; i++){ qsort(&tab[i][0], 15, sizeof(char), scmpr); } […]

使用合并排序对数组进行排序

我已经在c中实现了合并排序,虽然代码似乎是正确的,代码没有给我排序的数组而是返回给它的相同数组,这意味着我的合并函数不工作 #include #include void re_sort(int arr[],int size); void merge(int left[],int right[],int arr[],int rightlen,int leftlen); int main(void) { int a[10]; int n; printf(“enter the number\n”); scanf(“%d”,&n); printf(“enter the elements\n”); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } re_sort(a,n); //merge sort using recursion printf("the sorted list is:\n"); for(int i=0;i<n;i++) { printf("%d\t",a[i]); } return 0; } void re_sort(int arr[],int size) { […]

堆使用链接列表排序

我想知道是否有人曾使用链表进行堆排序,如果有人可以提供代码。 我已经能够使用数组进行堆栈操作,但是尝试在链接列表中进行操作似乎是不切实际的,只是你知道在哪里痛苦。 我必须为我正在做的项目实现链接列表,任何帮助将不胜感激。 我也在使用C.

合并排序结构

#include #include typedef struct points{ float axis[2]; int id; }Points; typedef enum{ SortById, SortByXAxis }SortType; Points* fill_Array(char* filename, int* length); void Print_set(Points* set, int number_of_points); void mergesort(Points* set, int low, int high, int number_of_points,SortType sort); void merge(Points* set, int low, int middle, int high, int number_of_points,SortType sort); int main(int argc, char* argv[]) { int length; […]

关于使用std :: sort的std :: less和std :: more的困惑

在C中,sort通常实现,如下例所示: #include void Sort( int* arr, int n, bool(*cmp)(int,int) ) { for( int i=0; i<n-1; i++ ) { for( int j=i+1; j b; } // greater int descending( int a, int b ) { return a < b; } // less void main() { int arr[10] = { 1,3,5,7,9,2,4,6,8,10 }; // ascending Sort( arr, 10, […]

如何修复这种非递归奇偶合并排序算法?

我正在寻找非递归奇偶合并排序算法,并找到了两个来源: Sedgewick R.的一本书 这个问题 两种算法都相同但是错误。 生成的排序网络不是奇偶合并排序网络。 以下是具有32个输入的结果网络的图像。 2条水平线之间的垂直线表示将值a [x]与[y]进行比较,如果大于,则交换数组中的值。 32个输入的奇偶合并排序http://sofzh.miximages.com/c/11fig07.gif (可点击) 我将代码从Java复制到C并用printf替换了exch函数来打印交换候选者。 当绘制对的图时,可以看出生成了太多对。 有谁知道如何修复此算法? 为什么我需要非递归版本? 我想将这个排序网络转换为硬件。 将管道阶段插入非递归算法很容易。 我还调查了递归版本,但是将算法转换为流水线硬件太复杂了。 我的C代码: #include #include void sort(int l, int r) { int n = r-l+1; for (int p=1; p0; k/=2) for (int j=k%p; j+k<n; j+=(k+k)) for (int i=0; i<njk; i++) if ((j+i)/(p+p) == (j+i+k)/(p+p)) printf("%2i cmp %2i\n", l+j+i, l+j+i+k); […]

stdlib的qsort是递归的吗?

我已经读过qsort只是一种通用的类型,没有关于实现的承诺。 我不知道库在不同平台之间的差异,但假设Mac OS X和Linux实现大致相似, 那么qsort实现是递归的还是需要大量的堆栈 ? 我有一个大型数组(数十万个元素),我想要排序它而不会让我的堆栈被遗忘。 或者,对于大型数组的等价物的任何建议?

在C中对链表进行排序

我试图通过找到最大值,从其位置删除它,然后将其插入列表顶部来对链表进行排序。 我遇到的困难是实际删除和插入顶部。 问题似乎是在sortList函数中包含的while循环中的if条件,但我不确定如何修复它。 任何帮助,将不胜感激。 #include #include typedef struct node{ int num; struct node *next; } Node, *NodePtr; void printList(NodePtr np); NodePtr makeList(void); NodePtr makeNode(int n); NodePtr sortList(NodePtr list); int main(void) { NodePtr list; printf(“Enter numbers for the list (0 to end)\n”); list = makeList(); printList(list); list = sortList(list); printList(list); return 0; } NodePtr makeList(void) { […]