Tag: qsort

使用stdlib的qsort()对字符串数组进行排序

一些序言:我是一名计算机工程专业的学生,​​经过3个学期的Java(直到数据结构),在C学习第一堂课。 这个问题与家庭作业有关,但是为我解决了几个步骤。 我有一个输入文件,我读入内存,它存储在char [9] [500]。 我读入最多500个最大长度为8的字符串。我试图使用stdlib内置的qsort()函数对这个数组进行排序,并且有一些内存错误。 重要的代码片段: char data[4][500][60]; char debug[500][9]; size_t count = 0; /* initialize file, open for reading */ FILE* pUserlog; pUserlog = fopen(“userlog”,”r”); while(!feof(pUserlog)) { fscanf(pUserlog, “%9s %8s %16s”,debug[count], data[1][count], data[2][count]); fgets(data[3][count], 60, pUserlog); count++; } 本节将数据读入数组。 这部分感兴趣的数组是“debug”。 这是上面指定的数组。 这是我的qsort比较函数: int compare(const void* a, const void* b) { const char **ia […]

尝试使用C qsort函数时出现问题

#include #include float values[] = { 4, 1, 10, 9, 2, 5, -1, -9, -2,10000,-0.05,-3,-1.1 }; int compare (const void * a, const void * b) { return ( (int) (*(float*)a – *(float*)b) ); } int main () { int i; qsort (values, 13, sizeof(float), compare); for (i = 0; i < 13; i++) { […]

stdlib的qsort是递归的吗?

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

在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中有效地获得这些指数? 提前谢谢(如果可能,请写下代码)

在C中使用qsort时发出警告

我写了比较函数 int cmp(const int * a,const int * b) { if (*a==*b) return 0; else if (*a < *b) return -1; else return 1; } 我有我的声明 int cmp (const int * value1,const int * value2); 我在我的程序中调用qsort就像这样 qsort(currentCases,round,sizeof(int),cmp); 当我编译它时,我收到以下警告 warning: passing argument 4 of ‘qsort’ from incompatible pointer type /usr/include/stdlib.h:710: note: expected ‘__compar_fn_t’ but argument is […]

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 qsort无法正常工作

我不知道我做错了什么,但以下代码没有正确排序数组。 #include #include int compare(const void* a, const void* b) { return (*(int*)a – *(int*)b); } int main() { int x[] = { -919238029, -889150029, -826670576, -579609061, -569653113, -305140505, -216823425, -193439331, -167683147, -49487019, -45223520, 271789961, 275570429, 444855014, 559132135, 612312607, 664554739, 677860351, 1005278191, 1031629361, 1089012280, 1115952521, 1521112993, 1530518916, 1907515865, 1931470931, -1631034645, -1593702794, -1465300620, -1263094822 }; int […]

C qsort()具有动态n乘2多维数组

首先,我定义了一个包含2列和10行的动态数组。 例如,这里整数设置为10。 int** array; int number = 10; array = malloc(number * sizeof(int*)); for (i = 0; i < number; i++) array[i] = malloc(2 * sizeof(int)); 然后我尝试使用qsort() 。 qsort( array, number, sizeof array[0], compare ); 这是我的比较function。 它按第一列中的整数值排序,然后按第二列排序,同时保留第一列中的顺序。 例如,“0 2,17,0 1”将变为“0 1,0 2,1 7”。 int compare ( const void *pa, const void *pb ) { int […]

使用qsort对struct指针数组进行排序

尝试在这个结构数组上使用qsort,我得到了奇怪的结果。 我有这个结构: struct access_data{ int sector; int arrival_time; int checked; int processed; }; 我从一个文件构造一个access_data指针数组,使它们按到达时间排序,但我需要稍后按扇区对它们进行排序,所以我有以下内容: int compare_data(const void* a, const void* b){ if (((access_data*)a)->sector sector) return 1; else if (((access_data*)a)->sector > ((access_data*)b)->sector) return -1; else return 0; } void scan(access_data* data[], int len, int sec_to_sec_seek){ qsort(data, len, sizeof(access_data*), &compare_data); show_data(data, len); } show_data只是打印数据,但我在示例输入上得到以下内容; 再次,按到达时间排序: data[0]: arrival_time: […]

使用带有结构数组的qsort需要帮助

现在,我已经看到了各种各样的例子,但我不明白他们的意思。 这是我的结构 typedef struct profile{ char gender[1]; double soc; . . . } PROFILE; soc是社会安全号码,我将要排序。 我知道你需要一个比较function,但我不知道如何提出我需要的确切内容。