《資料結構與演算法分析——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 是指能...