go 冒泡排序
冒泡排序
1、比较相邻两个值,如果第一个比第二个大(小)就交换他们两个
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
空间复杂度:f(1 + 1) = O(1)
时间复杂度:f((n-1)+(n-2)+……+1) = f(n²-1) = O(n²)
过程:
从左边开始,每相邻位置的值进行比较,如果左值大于右值,则交换位置,这样处理一遍后,最后的值肯定是最大的,因此进行第二遍循环的时候,可以少一次的
则 第一遍 为 n-1遍 ,第二次 则 n-1-1 遍 ,第三次则n-1-1-1 遍,类推,则一共执行(n-1)+(n-2)+(n-3)+...+1 遍
/**
* @author Yel
* 冒泡排序
* 1、比较相邻两个值,如果第一个比第二个大(小)就交换他们两个
* 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
* 3、针对所有的元素重复以上的步骤,除了最后一个。
* 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
* 空间复杂度:f(1 + 1) = O(1)
* 时间复杂度:f((n-1)+(n-2)+……+1) = f(n²-1) = O(n²)
* 过程:
* 从左边开始,每相邻位置的值进行比较,如果左值大于右值,则交换位置,这样处理一遍后,最后的值肯定是最大的,因此进行第二遍循环的时候,可以少一次的
* 则 第一遍 为 n-1遍 ,第二次 则 n-1-1 遍 ,第三次则n-1-1-1 遍,类推,则一共执行(n-1)+(n-2)+(n-3)+...+1 遍
*/
func Bubblesort(arr []int, order string) {
var length = len(arr)
if length < 2 {
return
}
for j := 0; j < length; j++ {
// 减 j 是因为 每一轮排序,最后以为永远是最大的
for i := 0; i < length-j-1; i++ {
if order == "asc" {
// 升序 前面大于后面则交换位置
if arr[i] > arr[i+1] {
arr[i], arr[i+1] = arr[i+1], arr[i]
}
} else {
// 降序
if arr[i] < arr[i+1] {
arr[i], arr[i+1] = arr[i+1], arr[i]
}
}
}
}
}