我有泡泡排序大数据的问题。这是一项任务,我的老师明确表示要使用冒泡排序来对这些大数据进行排序。我尝试在一个小文件中运行,它运行得很好,但它输出大文件的任何东西都有问题。我不知道问题是什么。我也必须使用冒泡排序。谢谢。下面提供了小文件" 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]);
}
}
答案 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)