更新时间:2024-04-14 08:40
sort(英文单词)
英 [sɔːt] 美 [sɔːrt]
sort of 有几分地;到某种程度;稍稍
some sort of 某种的;多少有些;仿佛
sort out 挑选出
of sorts 各种各样的
that sort of thing 那类事情
名词n. [C]
1.种类,品种,类型
All sorts of lamps are available in that shop.
在那家商店可买到各式各样的灯具。
That's just the sort of thing I want.
那正是我所需要的那种东西。
2.性质;性格
3.(常与修饰语连用)某种人,某类人[S1]
She's a happy-go-lucky sort.
她是个乐天派。
4.方式,样子
5.【电脑】排序
及物动词vt.
1.把...分类
They sort apples by grade.
他们把苹果按等级分类。
2.挑选,区分
Can't you sort the good from the bad?
你难道不会区分好坏吗?
3.整理
#include
sort(first,last)
注意:此处的first,last是两个地址,且有如下特性:
一般的,last并非所需排列数组的最后一个元素,而是first+元素个数,例如以下程序段:
int a[4] = {4,3,2,1};
此时对数组a进行排列,命令为:
sort(a,a+4);
在[first, last]中的元素进行排序按升序排列
简介
sort是Linux命令,主要用于排序文件、对已排序的文件进行合并,并检查文件以确定它们是否已排序。
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ File ... ]
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。
如果不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序。
排序关键字是输入行的一部分,由字段号和列号指定。字段是输入行的组成部分,由字段分隔符分隔。缺省字段分隔符是由一个或多个连续空格字符组成的序列。使用 -t 标志可指定不同的字段分隔符。在 C 语言和英语语言环境下,制表符和空格字符都是空格符。
使用排序关键字时,sort 命令首先根据第一个排序关键字的内容对所有行排序。然后,根据第二个排序关键字的内容,对所有第一个排序关键字相同的行排序,如此进行下去。按照排序关键字在命令行中出现的顺序给它们编号。如果两行对所有排序关键字的排序都相同,则对全部行依据当前语言环境的整理顺序进行比较。
对字段中的列进行编号时,缺省字段分隔符中的空格符将作为后继字段计数。前导空格不计作第一字段的一部分,-t 标志指定的字段分隔符将不作为字段的一部分计数。可使用 -b 标志忽略前导空格符。
可使用下列两种方法定义排序关键字:
* -k KeyDefinition
* FSkip.CSkip(废弃版本)。
使用 -k 标志定义排序关键字
-k KeyDefinition 标志采用下列形式:
-k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序关键字包括所有以 FStart变量指定的字段和 CStart 变量指定的列开头的及以 FEnd 变量指定的字段和 CEnd 变量指定的列结束的字符。如果不指定 Fend,就假定行的最后一个字符。如果不指定 CEnd,就假定 FEnd 字段的最后一个字符。KeyDefinition 变量中的任何字段号或列号都可以省略。缺省值为:
FStart 行开头
CStart 字段第一列
FEnd 行结束
CEnd 字段最后一列
如果字段间有任意空格,sort 就把它们看作分隔的字段。
Modifier变量的值可以是字母 b、d、f、i、n 或 r 中的一个或多个。修饰符仅应用于它们连接的字段定义,与同一字母的标志有同样的效果。修饰符字母 b 仅应用于其连接的字段定义的末尾。例如:
-k 3.2b,3r
指定排序关键字,从第三字段的第二非空格列开始并扩展至第三字段结束,对这个关键字的排序以逆向整理顺序完成。如果 FStart 变量和 CStart 变量在命令行末尾以外或在 FEnd 变量和 CEnd 变量之后,那么该排序关键字被忽略。
排序关键字也可用下列方式指定:
[+[FSkip1] [.CSkip1] [Modifier] ] [-[FSkip2] [.CSkip2] [Modifier]]
+FSkip1 变量指定跳过的字段数以到达排序关键字第一字段,+CSkip 变量指定在该字段中跳过的列数以到达排序关键字第一个字符。-FSkip 变量指定跳过的字段数以到达排序关键字后的第一个字符,-CSkip 变量指定在该字段中跳过的列数。可以省略任何要跳过的字段和列。缺省值为:
FSkip1 行开头
CSkip1 零
FSkip2 行结束
CSkip2 零
Modifier 变量指定的修改量与 -k 标志关键字排序定义中的相同。
因为 +FSkip1.CSkip1 变量指定到达排序关键字前要跳过多少字段和列,所以这些变量指定的字段号和列号通常比排序关键字本身的字段号和列号小 1。例如:
+2.1b -3r
指定排序关键字,从第三字段的第二非空格列开始并扩展至第三字段结束,对这个关键字的排序以逆向整理顺序完成。语句 +2.1b 指定跳过两个字段,然后跳过前导空格和另一列。如果 +FSkip1.CSkip1 变量在命令行末尾以外或在 -FSkip2.CSkip2 变量之后,则忽略该排序关键字。
注:一行的最大字段数为 10。
注:在任何排序关键字定义前出现的 -b、-d、-f、-i、-n 或 -r 标志应用于所有排序关键字。-b、-d、-f、-i、-n 或 -r 标志都不能单独出现在 -k KeyDefinition 之后;如果它们作为修饰符连接 KeyDefinition 变量,那么就只应用于连接排序关键字。如果这些标志之一跟随在 +Fskip.Cskip 或 -Fskip.Cskip 排序关键字定义后,那么该标志只能用于此排序关键字。
-A 使用 ASCII 整理顺序代替当前语言环境的整理顺序在逐字节的基础上排序。
-c 检查输入是否已按照标志中指定的排序规则进行排序。如果输入文件排序不正确,就返回一个非零值。
-d 使用字典顺序排序。比较中仅考虑字母、数字和空格。
-f 比较前将所有小写字母改成大写字母。
-i 比较中忽略所有非打印字符。
-k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序关键字包括所有以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和 CEnd 变量指定的列结束的字符。Modifier 变量的值可以是 b、d、f、i、n 或 r。 修饰符与同一字母的标志等价。
-m 只合并多个输入文件;假设输入文件已经排序。
-n 按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。
-o OutFile 将输出指向OutFile参数指定的文件,而不是标准输出。OutFile 参数值可以与 File 参数值相同。
-r 颠倒指定排序的顺序。
-t Character 指定 Character 为单一的字段分隔符。
-u 禁止按照排序关键字和选项的所有等同排序(每一组行中一行除外)。
-T Directory 将创建的所有临时文件放入 Directory 参数指定的目录中。
-y[Kilobytes] 用 Kilobytes 参数指定的主存储的千字节数启动 sort 命令,并根据需要增加存储量。(如果 Kilobytes 参数指定的值小于最小存储站点或大于最大存储站点,就以这个最小存储站点或最大存储站点取代)。如果省略 -y 标志,sort 命令以缺省的存储大小启动。-y0 标志用最小存储启动,而 -y 标志(不带 Kilobytes 值)用最大存储启动。sort 命令使用的存储量显著地影响性能。以大存储量对小文件排序将很浪费。
-z RecordSize 如果正在排序的任一行大于缺省的缓冲区大小,要防止出现异常终止。指定 -c 或 -m 标志时,省略排序阶段,使用系统的缺省缓冲大小。如果已排序行超出这一大小,排序异常终止。-z 选项指定排序阶段最长行的记录,因而可在合并阶段分配足够的缓冲区。RecordSize 必须指明等于或大于要合并的最长行的字节值。
该命令返回以下出口值:
0 所有输入文件成功输出,或指定了 -c 且正确排序了输入文件。
1 在 -c 选项下,文件没有按指定排序,或如果指定 -c 和 -u 选项,找到了两个具有相同关键字的输入行。
>1 发生错误。
1. 要在 LC_ALL、LC_COLLATE 或 LANG环境变量设置为 En_US 的情况下排序 fruits 文件,请输入:
LANG=En_US sort fruits
此命令序列显示以升序词典顺序排序的 fruits 文件的内容。每一列的字符,包括空格、数字和特殊字符都经一一比较。例如,如果 fruits 文件包含文本:
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 命令显示:
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前。如果您当前的语言环境指定 ASCII 之外的字符集,结果可能不同。
sort -d fruits
此命令序列排序和显示 fruits 文件的内容,并且只比较字母、数字和空格。如果 fruits 文件与示例 1 相同,那么 sort 命令显示:
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 标志忽略 %(百分号)字符,因为它不是个字母、数字或空格。(即 %%banana 被 banana 取代)。
要将包含大写字母和具有类似小写行的特殊字符行分组,请输入:
sort -d -f fruits
-d 标志忽略特殊字符,-f 标志忽略大小写差异。将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情况下,fruits 文件的输出结果变为:
apple
apple
%%banana
banana
ORANGE
orange
Persimmon
sort -d -f -u fruits
-u 标志告诉 sort 命令除去重复的行,使文件中的每一行唯一。此命令序列显示:
apple
%%banana
orange
Persimmon
不仅除去重复的 apple,而且也除去了 banana 和 ORANGE。除去这些是因为 -d 标志忽略 %% 这个特殊字符,-f 标志忽略大小写差异。
sort -u +0 -d -f +0 fruits
输入 +0 -d -f 完成的排序与示例 3 中 -d -f 的排序类型相同,+0 进行另一项比较以区分不一样的行。这防止 -u 标志将它们除去。
示例 1 所示的 fruits 文件中,添加的 +0 将 %%banana 与 banana 及 ORANGE 与 orange 区分开来。然而,apple 的两个实例是相同的,所以其中之一被删除。
apple
%%banana
banana
ORANGE
orange
Persimmon
sort -t: +1 vegetables
此命令序列排序 vegetables 文件,对每一行上第一个冒号后的文本进行比较。+1 告诉 sort 命令忽略第一字段,从第二字段的开始到该行的结束进行比较。-t: 标志告诉 sort 命令冒号分隔字段。如果 vegetables 包含:
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
那么,将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情况下,sort 命令将显示:
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
注意数字没有按照数字排序。当用字典式分类从左至右比较每一个字符时出现这种情况。换句话说,3 在 5 之前,所以 32 在 5 之前。
sort -t: +1 -n vegetables
此命令序列按照第二个字段对 vegetables 文件进行数字排序。如果 vegetables 文件与示例 6 中的相同,那么 sort 命令将显示:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104
8. 要对多个字段排序,请输入:
sort -t: +1 -2 -n +0 -1 -r vegetables
或
sort -t: -k2,2 n -k1,1 r vegetables
此命令序列对第二字段(+1 -2 -n)进行数字排序。在这个顺序中,它以逆字母顺序(+0 -1 -r)对第一字段排序。将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情况下,输出将类似于:
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104
此命令按数字顺序对行排序。当两行数字相同时,它们以逆字母顺序出现。
sort -o vegetables vegetables
此命令序列将排序输出存入 vegetables 文件( -o vegetables)。
文件
/usr/bin/sort 包含 sor排序函数
sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。sort(A)是默认的升序,而sort(A,'descend')是降序排序。
sort(A)若A是矩阵,默认对A的各列进行升序排列
sort(A,dim)
dim=1时等效sort(A)
dim=2时表示对A中的各行元素升序排列
看下面的例子
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> sort(A)
ans =
3 1 2
4 5 6
8 9 7
>> sort(A,1)
ans =
3 1 2
4 5 6
8 9 7
>> sort(A,2)
ans =
1 6 8
3 5 7
2 4 9
===================
Matlab中给一维向量排序是使用sort函数:sort(A),排序是按升序进行的,其中A为待排序的向量;若欲保留排列前的索引,则可用[sA,index] = sort(A),排序后,sA是排序好的向量,index 是 向量sA 中对 A 的索引。 索引使排列逆运算成为可能。
事实上,这里A ≡sA(index) ,[A恒等于sA(index)],这个结论确实很奇妙,而且很有用。不信你排序之后试下键入命令sA(index),看看得到的是不是就是排列前的A呢。
=====================
在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可,如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A中项的索引。排序是安升序进行的。
在Matlab中,访问矩阵中的元素,一维用A(1)访问向量A的第一个元素;(下标从1开始);二维用A(1,2)访问A中第一行,第二列的元素。
由于在sort函数的结果中,是安升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:
X=eye(size(A));
X=rot90(X);
A=A*X;
假如a是一个2*n的矩阵,即两行.
b=a(1,:);
[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;
a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应
a(1,:)=c;%第一行结果重新赋给a 的第一行
以下适用于m*n的矩阵按第一行排序
[ b, pos ] = sort( a( 1, : ) );
a = a( :, pos );
=======================
matlab按某一列排序,其他列不变办法b=sortrows(a,2) %a 为要排序的矩阵。2表示按第几列进行排序,整数代表升序,负数代表降序。
%将矩阵a按照第2列的升序排列,其他列不会作升序排列,而是将跟随着第2列 的变化,保持一一对应。
b=sortrows(a,-3)
%将矩阵a按照第3列的降序排列,其他列将跟随着第3列 的变化,保持一一对应。
data =
1 3 2
7 6 5
4 9 8
sortrows(data,1)
ans =
1 3 2
4 9 8
7 6 5
sortrows(data,-1)
ans =
7 6 5
4 9 8
1 3 2 /var/tmp sort 命令处理期间的临时空间。
/usr/tmp 如果不能在 /var/tmp 中创建文件,是 sort 命令处理期间的临时空间。
/tmp 如果不能在 /var/tmp 或 /usr/tmp 中创建文件,是 sort 命令处理期间的临时空间。
二、std:sort
sort 函数
boolsort( array &array [, int sort_flags] )
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
注:本函数为 array中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
如果成功则返回TRUE,失败则返回FALSE。