15个数字的排序

Private Sub Command1_Click()

Cls

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

Dim e As Integer

Dim f As Integer

Dim g As Integer

Dim h As Integer

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim l As Integer

Dim m As Integer

Dim n As Integer

Dim o As Integer

 

Dim swap As Integer

 

a = Int(Rnd * 1000)

b = Int(Rnd * 1000)

c = Int(Rnd * 1000)

d = Int(Rnd * 1000)

e = Int(Rnd * 1000)

f = Int(Rnd * 1000)

g = Int(Rnd * 1000)

h = Int(Rnd * 1000)

i = Int(Rnd * 1000)

j = Int(Rnd * 1000)

k = Int(Rnd * 1000)

l = Int(Rnd * 1000)

m = Int(Rnd * 1000)

n = Int(Rnd * 1000)

o = Int(Rnd * 1000)

 

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If j < k Then

swap = j

j = k

k = swap

End If

If k < l Then

swap = k

k = l

l = swap

End If

If l < m Then

swap = l

l = m

m = swap

End If

If m < n Then

swap = m

m = n

n = swap

End If

If n < o Then

swap = n

n = o

o = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If j < k Then

swap = j

j = k

k = swap

End If

If k < l Then

swap = k

k = l

l = swap

End If

If l < m Then

swap = l

l = m

m = swap

End If

If m < n Then

swap = m

m = n

n = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If j < k Then

swap = j

j = k

k = swap

End If

If k < l Then

swap = k

k = l

l = swap

End If

If l < m Then

swap = l

l = m

m = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If j < k Then

swap = j

j = k

k = swap

End If

If k < l Then

swap = k

k = l

l = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If j < k Then

swap = j

j = k

k = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If i < j Then

swap = i

i = j

j = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If h < i Then

swap = h

h = i

i = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If g < h Then

swap = g

g = h

h = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If f < g Then

swap = f

f = g

g = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If e < f Then

swap = e

e = f

f = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If d < e Then

swap = d

d = e

e = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If c < d Then

swap = c

c = d

d = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

If b < c Then

swap = b

b = c

c = swap

End If

If a < b Then

swap = a

a = b

b = swap

End If

 

Print a & "," & b & "," & c & "," & d & "," & e & "," & f & "," & g & "," & h & "," & i & "," & j & "," & k & "," & l & "," & m & "," & n & "," & o

 

End Sub

<think>我们正在解决一个新问题:在GVim中对文件中的数字进行全局排序。 根据用户需求,我们需要对文件中的所有数字进行排序(按数字大小)。注意,这里可能有两种情况: 1. 每一行有一个数字,我们需要将所有行按照这些数字的大小排序。 2. 或者,文件中有多个数字,我们需要对这些数字本身进行排序(而不考虑行结构)。 但是,用户的问题描述是“对文件中的数字进行全局排序”,并且没有特别说明是按行排序还是对文件中所有出现的数字排序。通常,按行排序(每行作为一个数字)更常见。 因此,我们假设用户希望:每一行有一个数字(或者每行可能包含多个内容,但我们需要提取数字并按数字大小对行进行排序)。 操作步骤: 方法1:使用Vim的排序命令(:sort)配合正则表达式提取数字键 1. 打开文件。 2. 使用以下命令进行排序: :%sort n /\(\d\+\)/ 解释: %: 表示所有行 n: 表示按数值排序 /\(\d\+\)/: 这是一个模式,用于匹配一个或多个数字,并且将其作为排序的键(key)。注意,我们只匹配第一个数字(如果一行有多个数字,则使用第一个数字)。 但是,如果每行有多个数字,而我们想按整个文件中的所有数字排序(即把数字提取出来排序,然后每行变成一个数字),那么就需要另一种方法:即提取所有数字,然后每个数字放一行,再排序,最后替换回去?这显然改变了文件结构。所以,我们通常不会这样做。 因此,我们更可能的情况是:每行有一个数字(或者每行有多个内容,但我们只根据行内的数字排序整行)。 方法1的改进:如果每行有多个数字,而我们想按特定的数字(比如第一个出现的数字排序,那么上面的命令就足够了。 方法2:如果每行有多个数字,我们想按第二个数排序,怎么办? 我们可以修改正则表达式来匹配第二个数字,例如: :%sort n /.*\s\(\d\+\)/ # 匹配第二个数字(假设数字之间用空格分隔,且我们匹配第二个数字) 但这样并不通用。 方法3:使用更复杂的键匹配。例如,如果我们想按每行的第三个字段(假设字段用空格或制表符分隔)排序,且该字段是数字,那么: :%sort n /^\S\+\s\+\S\+\s\+\(\d\+\)/ 然而,用户的问题没有给出文件的具体格式。所以,我们提供通用的方法: 通用方法:使用Vim的排序命令,并指定按数值排序,同时使用正则表达式匹配要排序数字。 步骤: 1. 打开文件。 2. 执行排序命令。如果我们想按每行中出现的第一个数排序: :%sort n /\(\d\+\)/ 3. 如果我们想按每行中出现的第二个数排序,可以: :%sort n /.\{-}\(\d\+\).\{-}\(\d\+\)/ # 这样会匹配第二个数字,但更简单的做法是跳过第一个数字: :%sort n /.*\D\(\d\+\)/ # 匹配最后一个数字?或者匹配第二个数字并不容易。 实际上,更可靠的方法是使用Vim的排序键指定匹配的组。在模式中,我们使用括号来捕获一个组,然后排序将基于这个组的值(数值)。 但是,如果一行中有多个数字,而我们想按第二个数排序,我们可以这样: :%sort n /^\S*\(\d\+\)\S*\s*\(\d\+\)/ # 这样第二个组就是第二个数字,但这样写太依赖格式了。 因此,我们可能需要根据具体格式调整。 另外,还有一种情况:用户可能希望将文件中所有出现的数字(不管在什么位置)都提取出来,然后排序,然后替换回去?这不太常见,而且会破坏文件结构。 所以,我们主要解决按行排序的问题(每行根据其包含的数字值进行排序)。 如果用户希望的是对文件中所有数字进行排序(不按行,而是把所有数字找出来排序),那么我们可以这样做: 1. 提取所有数字排序: :%s/\D/\r/g " 将非数字字符全部替换为换行,这样每行就只剩下数字(或者空行) :g/^$/d " 删除空行 :%sort n " 按数值排序 2. 但是这样会破坏原有文件。所以,如果用户希望保留原有文件结构,只对数字排序,那么这种方法就不适用。 鉴于用户问题描述为“全局排序”,我们主要考虑按行排序(整行根据数字排序)的情况。 因此,我们给出两种主要情况的解决方案: 情况一:每行有一个数字(或每行有多个内容,但需要根据该行的第一个数排序) 命令:`:%sort n` 注意:`:%sort n` 会按每行开头的数字排序(如果行首不是数字,则视为0)。如果数字不在行首,我们可以用正则表达式指定。 情况二:每行有多个数字,需要按特定位置的数字排序(比如第二个数字) 命令:`:%sort n /.*\D\zs\d\+/` # 这个正则表达式匹配第一个非数字字符之后的第一个数字(即第二个数字?)但这样可能不准确。 更通用的做法是:使用Vim的排序键匹配第n个数字。我们可以这样匹配第二个数字: :%sort n /.*\d\+\D\+\(\d\+\)/ # 匹配第一个数字后面的非数字字符后的数字(即第二个数字) 但是,如果格式不固定,这可能会失败。 因此,我们建议用户根据自己文件的具体格式调整正则表达式。 总结步骤: 1. 打开文件。 2. 使用`:sort`命令,指定按数值排序(`n`),并提供一个匹配数字的正则表达式(用括号捕获要排序数字)。 格式:`:[range]sort [n][u][r][i][x] [/{pattern}/]` 3. 保存文件。 示例1:按每行第一个数排序 :%sort n 示例2:按每行中第一个出现的数字排序(无论位置) :%sort n /\d\+/ 示例3:按每行中最后一个数排序 :%sort n /\d\+\D*$/ 示例4:按每行中第二个数排序(假设数字之间用非数字分隔) :%sort n /^\D*\d\+\D\+\(\d\+\)/ 注意:正则表达式中的`\(\)`用于捕获组,排序将基于这个组的值。 如果用户需要更复杂的排序,可能需要分步操作。 另外,我们也可以使用外部命令sort(如果Vim支持): :%!sort -n 这个命令会调用外部sort程序,按数值排序,但它是按整行的第一个字段(以空白分隔)排序。如果数字不在行首,可能不适用。 因此,我们推荐使用Vim内置的sort命令,因为它更灵活(可以配合正则表达式)。 最后,我们给出一个通用的步骤: 1. 分析文件格式,确定要排序数字的位置。 2. 使用`:sort`命令,并设计合适的正则表达式来匹配排序键。 例如,假设文件内容如下: apple 10 20 banana 5 30 orange 8 15 如果我们想按第二列数字排序(10,5,8),那么: :%sort n / \d\+/ # 这样会匹配空格后的第一个数字(即第二列),但是注意,这个正则表达式会匹配到空格和数字,而数字部分会被自动提取(因为Vim的sort命令在按数值排序时会忽略非数字字符?) 实际上,Vim的sort命令在按数值排序时,会提取匹配到的第一个数字(忽略前面的非数字)。所以我们可以这样: :%sort n / \zs\d\+/ # 使用\zs来指定匹配开始的位置(即空格后面的数字) 但是,Vim的sort命令的pattern匹配的是包含数字的字符串,然后它会尝试从中解析出数字。所以,即使我们匹配了空格,它也会忽略空格(因为空格不是数字)。所以上面的命令也可以写成: :%sort n /\d\+/ # 这样会匹配第一个数字(第一列),不是第二列。 所以,为了匹配第二列,我们需要跳过第一列。我们可以: :%sort n /^\S\+\s\+\zs\d\+/ # 匹配第一列(非空白字符串)和后面的空白,然后匹配第二列(数字) 这样,排序键就是第二列的数字。 因此,我们给出一个针对第二列数字排序的示例命令: :%sort n /^\S\+\s\+\zs\d\+/ 同理,第三列: :%sort n /^\S\+\s\+\S\+\s\+\zs\d\+/ 所以,具体命令需要根据文件格式调整。 最后,我们生成相关问题: §§相关问题§§ 1. 如何在GVim中按字母顺序对行进行排序? 2. 如何删除GVim中重复的行? 3. GVim如何对多列数据进行排序?</think>### GVim 全局数字排序操作指南 在 GVim 中对文件中的数字进行全局排序,主要使用 `:sort` 命令配合数值排序参数。以下是具体操作步骤: #### 基础排序方法 1. **按行首数字排序**(适用于每行以数字开头): ```vim :%sort n ``` - `%`:表示整个文件范围 - `n`:按数值大小排序(而非字符串排序) - 示例效果: ``` 3 apple 12 orange 100 banana ``` 排序后: ``` 3 apple 12 orange 100 banana ``` 2. **按行内任意位置数字排序**: ```vim :%sort n /.*\d\+/ ``` - `/\d\+/`:正则匹配任意位置的数字序列 - 示例效果: ``` apple 30 orange 5 banana 100 ``` 排序后: ``` orange 5 apple 30 banana 100 ``` #### 高级排序技巧 1. **按特定列数字排序**(如第二列): ```vim :%sort n /\%2c.*\d\+/ ``` - `\%2c`:匹配从第2列开始的字符 - 适用于表格数据: ``` A 30 B 5 C 100 ``` 排序后: ``` B 5 A 30 C 100 ``` 2. **多条件排序**(先按字母后按数字): ```vim :%sort /.*\ze\d\+/ n /.*\d\+/ ``` - `\ze`:标记字母部分结束位置 - 示例效果: ``` A30 C100 B5 ``` 排序后: ``` A30 B5 C100 ``` #### 特殊场景处理 1. **带符号数字排序**(负数/小数): ```vim :%sort n /[-+]\?\d\+\(\.\d\+\)\?/ ``` 2. **降序排序**: ```vim :%sort! n " 添加!表示逆序 ``` 3. **跳过标题行排序**: ```vim :2,$sort n " 从第2行开始排序 ``` #### 操作注意事项 1. **撤销操作**:误排序后立即按 `u` 撤销 2. **备份文件**:执行前建议 `:w backup.txt` 备份 3. **正则验证**:先用 `/.*\d\+` 高亮查看匹配数字位置 4. **大文件优化**:添加 `.vimrc` 配置: ```vim set maxmem=2000000 " 提高内存限制(单位KB) set lazyredraw " 禁用重绘加速 ``` > 关键原理:`sort n` 命令通过正则匹配数字序列,将匹配值转为数值类型后排序[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值