c 排序大型结构数组并打印到屏幕

标签 c arrays sorting struct structure

我在对结构数组进行排序然后将其打印到屏幕时遇到问题。当我在 Visual Studio 2012 中运行代码时,它根本不打印。我花了好几个小时才搞清楚, Debug模式有很多问题。我真的需要知道为什么它没有按照我的指示去做。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

struct RandStruct
{
int year;
char string[31];
int frequency;
};

struct RandStruct randArray[150000];

int main(void)
{

int i, j;

for (i = 0; i < 150000; i++)
{
    randArray[i].year = 150000 - i;
    strcpy(randArray[i].string, "test");
    randArray[i].frequency = i;
}

for (i = 1; i < 150000; i++)
{
    for (j = 0; j < 150000 - i; j++)
    {
        if (randArray[j].year > randArray[j+1].year)
        {
            struct RandStruct temp = randArray[j];
            randArray[j] = randArray[j+1];
            randArray[j+1] = temp;
        }
    }
}

for (i = 0; i < 150000; i++)
{
    printf("%d,%s,%d\n", randArray[i].year, randArray[i].string, randArray[i].frequency);
}

return 0;
    }

最佳答案

排序,应该使用qsort函数,而不是重新发明轮子。

#include <stdlib.h>

int my_compar(const void *a, const void *b) {
  const struct RandStruct *aa = a;
  const struct RandStruct *bb = b;
  if(aa->year < bb->year) return -1;
  if(aa->year == bb->year) return 0;
  return 1;
}

int main(void) {
   ... other stuff ...
   size_t size = sizeof(struct RandStruct);
   qsort(randArray, sizeof(randArray)/size, size, my_compar);
}

关于c 排序大型结构数组并打印到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361007/

相关文章:

c - 我需要根据文件上有多少元素使用 X 结构,可以吗?

c - 分配结构指针数组

不使用 << 或 >> 检查 32 位符号位

java - 将数组传递给方法

css - 在 angular2 和 nativescript 中,*ngFor 显示数组的元素相互叠加

Java-如何在不扩展比较器的情况下对包含句点/点的字符串数组进行排序?

C程序-输出中的特殊字符

Java 正在自行对我的 double 组进行排序。为什么?

list - 按第二个元组元素对元组列表进行排序

c++ - 内存映射和排序文件后字节下落不明