按字母顺序对名称进行排序:更有效的方式

时间:2015-01-04 15:27:12

标签: c sorting alphabetical

我正在开发一个应用程序,其中一个函数是sort_books函数,它基本上必须按字母顺序对文件fp中的书名进行排序,然后将书写入文件fp2并打印出的名称。按字母顺序排列的书籍进入控制台。

我的功能与冒泡排序算法完美配合,但是对10万本书进行排序大约需要4分钟,这太多时间了。

有人知道如何调整此代码以提高效率和速度吗?

FILE *fp
FILE *fp2;

sort_books(){
struct book books[100000];
struct book b;

//open files

int i = 0;
while (!feof(fp)){

   fread(&b,sizeof(b),1,fp);

       if(feof(fp))
    {
        break;
    }   

    books[i] = b;
        i++;        
}

//number of books in the file
int len = i;

//bubble sort;
int j = 0;

//Bubble sort: sorting algorithm
    for(i=0; i<len; i++)
    {
        for(j=0; j<len-1; j++)
        {
           //If the first book should come after the next book in the array
           if(strcmp(books[j].name, books[j+1].name) > 0)
        {
            //swap the books
            struct book temp;
            temp = books[j];
            books[j] = books[j+1];
            books[j+1] = temp;
        }
        }
    }

    //now write each book in the array "books" into the file one by one
    int z;
    for(z=0; z<len; z++)
    {   
        fwrite(&books[z],sizeof(books[z]),1,fp2);
        //test console
        printf("Name: %s \n", books[z].name);
    }

    //close files

    }

1 个答案:

答案 0 :(得分:1)

冒泡排序是O(n ^ 2)。你可以尝试Quicksort,这是O(nlogn)。从本质上讲,大多数排序算法都比您演示的冒泡排序更快。

enter image description here

有关最常见排序方法,动画及其实现的列表,请参阅以下页面:

http://www.sorting-algorithms.com/