Tag: 排序

采访难题:使用有限的内存对一百万个输入进行排序

我尝试使用外部排序来回答这个问题,但是访问者回答说复杂性是高nn(log(n)),即n square * logn。 有没有更好的选择。 简化问题:假设我们有1000个元素要排序,只为100个元素分配空间。 什么是比外部排序花费更少时间的最佳算法。

排序结构数组的成员

给定一个结构数组(在C中)我试图以数字顺序打印出性别组和子顺序的结果。 例如: struct employee{ char gender[13] char name[13]; int id; }; 假设我像这样定义结构数组: struct employee info[2]={{“male”,”Matt”,1234},{“female”,”Jessica”,2345},{“male”,”Josh”,1235}}; 我怎么能打印结果像 1234 Matt 1235 Josh 2345 Jessica

在C中排序后跟踪数组的原始索引

我有一个数组让我们说A[5] ,5个元素是5,4,1,2,3 。 现在我按升序对这些数组进行排序。 所以结果数组现在是1,2,3,4,5 。 我使用stdlib.h qsort()函数stdlib.h进行排序。 问题是我如何获得原始数组相对于我的新数组的索引。 最初我的指数是0,1,2,3,4 ,相应的值为5,4,1,2,3 ,现在指数已经变为2,3,4,1,0。 如何在C中有效地获得这些指数? 提前谢谢(如果可能,请写下代码)

使用备用最小 – 最大值对数组进行排序

给定一个数组我需要对它进行排序,使得第一个元素是最小值,第二个元素是最大的元素,第三个元素是第二个最小的元素,依此类推。 但我的代码只打印原始数组,我无法弄清楚原因。 任何意见,将不胜感激。 #include void swap(int m, int n); int main() { int i,j,A[10],n; printf (“enter the number of array elements\n”); scanf (“%d”, &n); for (i=0;i<n;i++){ scanf ("%d", &A[i]); } for (i=0;i<n;i++){ if (i%2 == 0){ for (j=i;j<n;j++){ if (A[j] < A[i]){ swap(A[i],A[j]); } } } else if (i%2 != 0){ for (j=i;j A[i]){ swap […]

使用多个排序条件对数组进行排序(QuickSort)

我试图找出(使用快速排序算法)如何通过2个标准对结构数组进行排序。 比如说我有一个结构: struct employee{ char gender[12]; char name[12]; int id; }; 说我的输入是: struct employee arr[3]= { {“male”,”Matt”,1234}, {“female”,”Jessica”,2345}, {“male”,”Josh”,1235} }; 我想先按性别对元素进行排序,然后按升序对ID进行排序。 一个例子是,所有的男性首先打印出他们的ID,然后是所有的女性。 我试图这样做而不使用qsort函数,但我没有丝毫想法如何检查。 这是我的排序function: void quicksort(struct employee *arr, int left, int right) { int pivot, l, r, temp; if(left < right) { p = left; l = left; r = right; while(l < r) { […]

Qsort比较function

我是C的初学者,我正在尝试理解qsort函数所需的比较函数。 第一部分:语法 一个简单的建议用法就是这个(我已经包含了一些main()代码来打印结果): #include #include int values[] = { 40, 10, 100, 90, 20, 25, 12, 13, 10, 40 }; int compare(const void *a, const void *b) { const int *ia = (const int *)a; // casting pointer types const int *ib = (const int *)b; return *ia – *ib; } int main() { int […]

C或C ++。 如何比较给出char *指针的两个字符串?

我正在以两种方式对我的汽车arrays进行排序。 一年一年,如下所示。 和另一个由make。 Make是一个char *当我指向它们时,如何比较字符串? int i, j; for(i=0; i<100; i++){ for(j=0; jyear > carArray[j+1]->year){ swap(carArray[j], carArray[j+1]); } } } } 上述方法适用于int(年)。 如何使它适用于char指针?

如何仅使用堆栈操作对堆栈进行排序?

我在网上发现了这个问题。 给定堆栈S,编写C程序以对堆栈进行排序(按升序排列)。 我们不允许对堆栈的实现方式做任何假设。 唯一要使用的function是: Push Pop Top IsEmpty IsFull 我想我们可以构建堆并对其进行排序。 什么是最佳解决方案?

如何在C中按顺序对数字和字母排序文件名?

我使用以下代码按字母顺序对文件进行排序,并对文件进行排序,如图所示: for(int i = 0;i < maxcnt;i++) { for(int j = i+1;j 0) { strcpy(temp,Array[i]); strcpy(Array[i],Array[j]); strcpy(Array[j],temp); } } } 但我需要按照Windows资源管理器中的顺序对其进行排序 怎么这样排序? 请帮忙

基于汉明重量的索引

假设我们有一个整数的bitsize n=4; 我所描述的问题是如何根据汉明权重及其知道bitsize值将数字索引到数组位置。 例如,一个包含16个用于bitsize 4的元素的数组将会/看起来像这样: |0|1|2|4|8|3|5|6|9|10|12|7|11|13|14|15| 元素按其汉明重量(必要)分组,并根据大小(不必要)排序。 只要你可以采取例如3(0011)做一些操作并取回索引5,5(0101) – > 6等,就不需要排序。 将出现n位的所有组合,并且不会重复。 例如, 3 bitsize将具有数组: |0|1|2|4|3|5|6|7| 我最好有一个没有循环的解决方案。 或任何讨论simillar解决方案的论文。 或者最后只是抛出任何关于如何做到这一点的想法。