3k さん
ユーザー定義の比較を使うとすると下のようになるんですが
これは許容範囲だと思いますか?
※便宜上コムソートにしています
// ソートライブラリ ここから
#module comb_sort_mod
#define global comb_sort_a s_cmp_a@comb_sort_mod
#define global comb_sort_b s_cmp_b@comb_sort_mod
#define global comb_sort(%1,%2,%3=0) s_var@comb_sort_mod=%3 : comb_sort_ %1,%2,s_var@comb_sort_mod
#deffunc comb_sort_ array data, int data_num, var usercmp, \
	local h, local is_changed, local cmp, local temp
	cmp=usercmp
	if vartype(cmp)!1 {
		if vartype(data)=vartype("str") {
			cmp=*cmp_str_default
		} else {
			cmp=*cmp_num_default
		}
	}
	h=data_num*10/13
	repeat
		is_changed=0
		repeat data_num-h
			dup s_cmp_a, data(cnt)
			dup s_cmp_b, data(cnt+h)
			gosub cmp
			if stat>0 {
				temp=data(cnt)
				data(cnt)=data(cnt+h)
				data(cnt+h)=temp
				is_changed=1
			}
		loop
		if h>1 {
			h=h*10/13
		} else {
			if is_changed=0 : break
		}
	loop
	return
// デフォルトの比較関数
*cmp_num_default
	return comb_sort_a>comb_sort_b
*cmp_str_default
	dim a
	dim b
	repeat
		a=peek(comb_sort_a, cnt)
		b=peek(comb_sort_b, cnt)
		if a=0 or a!b : break
	loop
	return a>b
#global
// ソートライブラリ ここまで
/*============================================================
============================================================*/
// 整数のソート
dim data
data=6,3,9,7,2,1,8,4,5
disp data
comb_sort data, length(data)
disp data
comb_sort data, length(data), *cmp_num_descend
disp data
// 文字列のソート
dim data
data="banana", "grape", "apple", "meron", "strawberry"
disp data
comb_sort data, length(data)
disp data
comb_sort data, length(data), *cmp_str_descend
disp data
stop // 終了!
// 数値用ユーザー定義比較関数?
*cmp_num_descend
	return comb_sort_a<comb_sort_b
// 文字列用ユーザー定義比較関数?
*cmp_str_descend
	repeat
		a=peek(comb_sort_a, cnt)
		b=peek(comb_sort_b, cnt)
		if a=0 or a!b : break
	loop
	return a<b
#module
// データ表示
#deffunc disp array data, int data_num_, local data_num, local buf
	data_num=data_num_
	if data_num<=0 : data_num=length(data)
	repeat data_num
		if cnt=0 {
			buf=str(data(cnt))
		} else {
			buf+=", "+str(data(cnt))
		}
	loop
	mes buf
	return
#global