外部排序 簡單演算法

2021-07-13 21:39:51 字數 2061 閱讀 1611

《資料結構與演算法分析——c語言描述》  第七章

外部排序簡單演算法

雖然是用了歸併,涉及到檔案,還是挺麻煩的。檔案讀取之後是不用fseek的話是不能返回的,並且檔案我是用文字儲存數字,每個數字的字元長度不一樣,不能像陣列那樣隨機讀取存放,只能乙個乙個的讀。

#include #include //#include"fatal.h"

#define m 3

typedef int elementtype;

void insertionsort(int *a, int n)

}void swap_my(elementtype *a, elementtype *b)

elementtype median3(elementtype a, int left, int right)

#define cutoff (3)

void qsort_my(elementtype a, int left, int right)

while (a[--j] > pivot) {}

if (i < j)

swap_my(&a[i], &a[j]);

else

break;

} swap_my(&a[i], &a[right - 1]);

qsort_my(a, left, i - 1);

qsort_my(a, i + 1, right);

} else

insertionsort(a + left, right - left + 1);

}void quicksort_my(elementtype a, int n)

void write(int *a, int n, file *out)

}int main()

quicksort_my(max_memory, readnum);

//交替寫到tb1或寫到tb2

if (wheretowrite == 0)

write(max_memory, readnum, tb1);

else

write(max_memory, readnum, tb2);

wheretowrite = wheretowrite == 0 ? 1 : 0;

} fclose(ta1);

fclose(tb1);

fclose(tb2);

int runlen = m;

int wheretoread = 1;//0表示ta1,ta2,1表示tb1,tb2

while (runlen < n)

else

wheretowrite = 0;//寫到哪,要寫的兩個磁碟中的 第乙個磁碟還是第二個磁碟

int end1 = 0, end2 = 0;//要讀的檔案的 第乙個地盤 第二個磁碟 是否結尾

while (!end1 || !end2)

else

}if (ishasnumnotwrite2 == 0)

else

}if (a < b)

else };

//有可能是成功讀入、滿了未填滿、中途break

while (end1 == 0 && i < runlen)

}fprintf(file[2 + wheretowrite], "%d ", a);

ishasnumnotwrite1 = 0;

i++;

}while (end2 == 0 && j < runlen)

else

}fprintf(file[2 + wheretowrite], "%d ", b);

ishasnumnotwrite2 = 0;

j++;

}wheretowrite = wheretowrite == 0 ? 1 : 0;

} for (int i = 0; i < 4; i++)

fclose(file[i]);

runlen *= 2;

wheretoread = (wheretoread == 0) ? 1 : 0;

}}

外部排序演算法

外部排序指的是大檔案的排序,即待排序的記錄儲存在外儲存器上,在排序過程中需進行多次的內 外存之間的交換。一般情況下 其中tio取決於所用的外存裝置,顯然tio較tmg要大得多。因此,提高外排的效率應主要著眼於減少外存資訊讀寫的次數d。需要歸併的次數越少,讀寫的次數d越小。因此我們使用k 路平衡歸併的...

外部排序演算法整理

今天看了些排序相關的綜述,裡面介紹了一種外排演算法 置換選擇排序演算法,讀了之後雲裡霧裡的。於是乎谷狗了一下,學習了學習維基百科上關於外排的介紹,感覺還不錯,確實解決了心中的疑問。其中,外歸併排序和置換選擇排序都講得很清楚,還提供了一些不錯的鏈結,如jim gray的sort benchmark 故...

外部排序演算法整理

的。於是乎谷狗了一下,學習了學習維基百科上關於外排的介紹,感覺還不錯,確實解決了心中的疑問。其中,外歸併排序和置換選擇排序都講得很清楚,還提供了一些不錯的鏈結,如jim gray的sort benchmark 故在部落格中mark一下,以表感謝!外排序外排序 external sorting 是指能...