天天看點

c語言讀取txt檔案快速排序,C語言對磁盤檔案進行快速排序簡單執行個體

C語言對磁盤檔案進行快速排序簡單執行個體

快速排序(quick sort)是由C.A.R.Hoare發明并命名的,這種排序被認為是目前最好的一種排序算法。快速排序基于交換排序,與同樣的基于交換排序的冒泡排序法相比,其效果非常明顯。

它的基本思想是:通過一趟排序将要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分别進行快速排序,整個排序過程可以遞歸進行,以此達到整個資料變成有序序列。

本例中快速排序是通過函數quick_disk(FILE* fp,int count)中反複調用排序函數qs_disk(FILE* fp,int left,int right)實作快速排序。在qs_disk()中,通過函數get_name(fp,(long)(i+j)/2)傳回中間值作為比較數進行快速排序。

下面是具體的源代碼:

#include #include #include #define NUM 4

struct data

{

char name[20];

char school[20];

char city[20];

char province[20];

}info;

struct data addrs[NUM]=

{

"OKBase","BIT","JiLin","JiLin",

"TongWei","BIT","ZhengJiang","JiangSu",

"SunYou","BIT","WeiFang","ShangDong",

"XiaoMing","PKU","TaiYuan","ShanXi"

};

void quick_disk(FILE *fp,int count);

void qs_disk(FILE *fp,int left,int right);

void exchangedata(FILE *fp,long i, long j);

char *get_name(FILE *fp, long rec);

void print_data(struct data *p);

struct data *get_data(FILE *fp,long rec);

int main(void)

{

int i;

FILE *fp;

if((fp = fopen("datalist.txt","w+")) == NULL)

{

printf("打開檔案失敗\n");

exit(1);

}

printf("将未排序的資料寫入檔案\n");

fwrite(addrs,sizeof(addrs),1,fp);

for(i=0;i0)&&(j>left))

j--;

if(i<=j)

{

exchangedata(fp,i,j);

i++;

j--;

}

}while(iname;

}

struct data *get_data(FILE *fp,long rec)

{

struct data *p;

p = &info;

rewind(fp);

fseek(fp,rec*sizeof(info),SEEK_SET);

fread(p,sizeof(info),1,fp);

return p;

}

void print_data(struct data *p)

{

printf("姓名:%s\n",p->name);

printf("學校:%s\n",p->school);

printf("城市:%s\n",p->city);

printf("省 :%s\n",p->province);

}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支援!