为kotlin代码
/**
* 冒泡排序
*/
private fun bubbleSortV1(data: ArrayList<Int>) {
for (i in 0 until data.size - 1) {
for (j in 0 until data.size - 1 - i) {
if (data[j] > data[j + 1]) {
val temp = data[j]
data[j] = data[j + 1]
data[j + 1] = temp
}
}
}
}
如果数据为:1,2,3,4,5,6,8,7 第一次排序后就已经可以了,不需要继续了,所以优化代码如下:
/**
* 冒泡排序优化版
*/
private fun bubbleSortV2(data: ArrayList<Int>) {
for (i in 0 until data.size - 1) {
var isSorted = true
for (j in 0 until data.size - 1 - i) {
if (data[j] > data[j + 1]) {
val temp = data[j]
data[j] = data[j + 1]
data[j + 1] = temp
//排序了
isSorted = false
}
}
if (isSorted) {
//没有执行到交换的一步,说明已经有序了,可以直接退出了
break
}
}
}
若数据为23145678 则第一次排序后为21345678,然后最后一位,为不需要排序的数组,第二次排到7。(看for循环的条件可知) 但是其实45678都是有序的不需要比较的。所以继续优化
/**
* 冒泡排序再优化
*/
private fun bubbleSortV3(data: ArrayList<Int>) {
for (i in 0 until data.size - 1) {
var isSorted = true
//比对到这里为止
var sortedIndex=data.size - 1
for (j in 0 until sortedIndex) {
if (data[j] > data[j + 1]) {
val temp = data[j]
data[j] = data[j + 1]
data[j + 1] = temp
//排序了
isSorted = false
sortedIndex =j
}
}
if (isSorted) {
//没有执行到交换的一步,说明已经有序了,可以直接退出了
break
}
}
print(data)
}