📄 ut0sort.h
字号:
/**********************************************************************Sort utility(c) 1995 Innobase OyCreated 11/9/1995 Heikki Tuuri***********************************************************************/#ifndef ut0sort_h#define ut0sort_h#include "univ.i"/* This module gives a macro definition of the body ofa standard sort function for an array of elements of anytype. The comparison function is given as a parameter tothe macro. The sort algorithm is mergesort which has logarithmicworst case.*//***********************************************************************This macro expands to the body of a standard sort function.The sort function uses mergesort and must be defined separatelyfor each type of array.Also the comparison function has to be defined individuallyfor each array cell type. SORT_FUN is the sort function name.The function takes the array to be sorted (ARR),the array of auxiliary space (AUX_ARR) of same size,and the low (LOW), inclusive, and high (HIGH), noninclusive,limits for the sort interval as arguments.CMP_FUN is the comparison function name. It takes as argumentstwo elements from the array and returns 1, if the first is bigger,0 if equal, and -1 if the second bigger. For an eaxmaple of usesee test program in tsut.c. */#define UT_SORT_FUNCTION_BODY(SORT_FUN, ARR, AUX_ARR, LOW, HIGH, CMP_FUN)\{\ ulint ut_sort_mid77;\ ulint ut_sort_i77;\ ulint ut_sort_low77;\ ulint ut_sort_high77;\\ ut_ad((LOW) < (HIGH));\ ut_ad(ARR);\ ut_ad(AUX_ARR);\\ if ((LOW) == (HIGH) - 1) {\ return;\ } else if ((LOW) == (HIGH) - 2) {\ if (CMP_FUN((ARR)[LOW], (ARR)[(HIGH) - 1]) > 0) {\ (AUX_ARR)[LOW] = (ARR)[LOW];\ (ARR)[LOW] = (ARR)[(HIGH) - 1];\ (ARR)[(HIGH) - 1] = (AUX_ARR)[LOW];\ }\ return;\ }\\ ut_sort_mid77 = ((LOW) + (HIGH)) / 2;\\ SORT_FUN((ARR), (AUX_ARR), (LOW), ut_sort_mid77);\ SORT_FUN((ARR), (AUX_ARR), ut_sort_mid77, (HIGH));\\ ut_sort_low77 = (LOW);\ ut_sort_high77 = ut_sort_mid77;\\ for (ut_sort_i77 = (LOW); ut_sort_i77 < (HIGH); ut_sort_i77++) {\\ if (ut_sort_low77 >= ut_sort_mid77) {\ (AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ ut_sort_high77++;\ } else if (ut_sort_high77 >= (HIGH)) {\ (AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ ut_sort_low77++;\ } else if (CMP_FUN((ARR)[ut_sort_low77],\ (ARR)[ut_sort_high77]) > 0) {\ (AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ ut_sort_high77++;\ } else {\ (AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ ut_sort_low77++;\ }\ }\\ for (ut_sort_i77 = (LOW); ut_sort_i77 < (HIGH); ut_sort_i77++) {\ (ARR)[ut_sort_i77] = (AUX_ARR)[ut_sort_i77];\ }\}\ #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -