func QuickSortV2(arr []
int
) {
sort(arr,
0
,
len
(arr)
-
1
)
}
func sort(arr []
int
, left
int
, right
int
) {
if
left >
=
right {
return
}
p :
=
paration(arr, left, right)
sort(arr, left, p
-
1
)
sort(arr, p
+
1
, right)
}
func paration(arr []
int
, left
int
, right
int
)
int
{
/
/
在 left和right之间生成一个随机索引
/
/
seed :
=
time.Now().UnixNano()
/
/
seed函数耗时太长,目前没有找到更好的方法
/
/
rand.Seed(seed)
/
/
p :
=
rand.Intn(right
-
left)
+
left
+
1
/
/
swap(arr, left, p)
p :
=
rand.
Int
()
%
(right
-
left
+
1
)
+
left
arr[p], arr[right]
=
arr[right], arr[p]
swap(arr, left, p)
/
/
left
+
1
到j直接都是小于v的,j
+
1
到i
-
1
直接都是大于v的
j :
=
left
for
i :
=
left; i <
=
right; i
+
+
{
if
arr[i] < arr[left] {
j
+
+
swap(arr, i, j)
}
}
swap(arr, left, j)
return
j
}
func swap(arr []
int
, i
int
, j
int
) {
tmp :
=
arr[i]
arr[i]
=
arr[j]
arr[j]
=
tmp
}
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧