冒泡排序不适用于大文件,但适用于小文件

时间:2014-10-11 01:05:05

标签: c sorting bubble-sort

我有泡泡排序大数据的问题。这是一项任务,我的老师明确表示要使用冒泡排序来对这些大数据进行排序。我尝试在一个小文件中运行,它运行得很好,但它输出大文件的任何东西都有问题。我不知道问题是什么。我也必须使用冒泡排序。谢谢。下面提供了小文件" small.txt"。大文件" big.txt"确实适合这里,它包含数千行,但格式与小文件相同,我的程序如下:我等待1小时输出任何内容,程序仍在进行大文件。

small.txt

FORD    2001
NISSAN  2000
JAYCO   2003

程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    FILE *read;
    char lines[110000];
    int i=0, c, j,a;
    char *make[111100];
    char *year[111100], *swapyear, *swapmake; 

    if( (read = fopen("big.txt", "r")) == NULL) 
    {
       printf("can't open %s\n", "big.txt");
       exit(1);
    }

    c=0;
    while(fgets(lines, sizeof(lines), read)!=NULL){
       make[c] = strdup(strtok(lines, " "));
       year[c] = strdup(strtok(NULL, " "));
       c++;
    }


    for(j=0; j<c-1; j++){
        for(a=0; a<(c-j-1); a++){
            if(atoi(year[a]) > atoi(year[a+1])){
                swapyear = year[a];
                swapmake = make[a];
                year[a] =year[a+1];
                make[a] = make[a+1];
                year[a+1] = swapyear;
                make[a+1] = swapmake;
            }
        }
    }  

  for(j=0; j<=(c-1); j++)
    {
        printf("%s %s\n", make[j], year[j]);
    }    


 }

1 个答案:

答案 0 :(得分:0)

This is the bubble sort algorithm. 
Note that it extends all the way through the data on each pass
(unlike the OPs code)

步骤1:对i = 1重复步骤2和3以对要排序的条目数

步骤2:设置j = 1

步骤3:在j <= n

时重复
     (A) if  a[i] < a[j]

         Then interchange a[i] and a[j]

         [End of if]

     (B) Set j = j+1
    [End of Inner Loop]

[End of Step 1 Outer Loop]

第4步:退出

这是一个代码实现:

for(i=0 ; i<n ; i++)
{
    for(j=0 ; j<n-i-1 ; j++)
    {
        if(arr[j]>arr[j+1]) //Swapping Condition is Checked
        {
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

以上使用临时变量,通常是个坏主意。 以下是使用XOR运算符(并且没有临时变量)

的示例
x = x ^ y  (1)
y = y ^ x  (2)
x = x ^ y  (3)