【 循序渐进,戒骄戒躁,脚踏实地,方成大器。】
那么我们接着上篇最基本的循环比较大小之后,我给大家介绍两个在排序中的小技巧:
1、使用假设法:
//最大值
var max = a[0]
for i in 0...arr.cout-1{
if a[i] > max{
max = a[i]
}
}
// 最小值
var min = a[0]
for j in 0...arr.cout-1{
if arr[j] < min{
min = arr[j]
}
}
通过上面代码,我们知道比如要求最大值,就添加一个中间变量max,假设第一个数为最大值,将第一个数赋值给max,如果比较中有比max大的,就讲其值赋给max,然后继续往下比较,最终max就是最大值。求最小值同理。
这样的方法还有一个好处就是不会改变数组中数据原有的位置,有时你单单只是为了找出最大最小值而不使原数组改变,那就尽情的使用这种方法吧!
2、交换法:
//三个数排序 交换思想
#if false
var a = scanf()
var b = scanf()
var c = scanf()
var tmp = 0
if a > b{
tmp = a
a = b
b = tmp
}
if a > c{
tmp = a
a = c
c = tmp
}
if b > c {
tmp = b
b = c
c = tmp
}
print("\(a),\(b),\(c)")
#endif
//四个数的排序
#if true // 类似于冒泡, 把最小的 比出来放到前边来 4 2 3 1
var a = scanf()
var b = scanf()
var c = scanf()
var d = scanf()
var tmp = 0
if a > b{ // 如果a > b 那么 把小的放到a里来: 2 4 3 1
tmp = a
a = b
b = tmp
}
if a > c{ // 2 4 3 1
tmp = a
a = c
c = tmp
}
if a > d{ // 1 4 3 2
tmp = a
a = d
d = tmp //到此处已经保证 四个最小的放在了最前边
}
if b > c{ // 1 3 4 2
tmp = b
b = c
c = tmp
}
if b > d{ // 1 2 4 3 保证第二小放在第二位
tmp = b
b = d
d = tmp
}
if c > d{
tmp = c
c = d
d = tmp
}
print("\(a),\(b),\(c),\(d)")
#endif
通过上面代码我们可以抽离排序最基本的想就是交换,两两比较大小,较大的放前边,这就是降序,反之为逆序,就这样依次比较完成排序。