冒泡排序有调优 go语言

冒泡排序调优 go语言

常规做法

package main

import "fmt"



func main()  {
	origin := [...]int{1,223,3,4,34,3545,3,4,23,56,78,89,345,2377,3457,6777}
	fmt.Println(origin)
	//冒泡排序 与调优
	//lastExchangeIndex := 0
	//sortBorder := 0
	for i := 0; i<len(origin);i++{
		fmt.Println(i)
		//isSorted := false
		for j := len(origin)-1; j>i;j--{
			if origin[j]<origin[j-1] {
				tmp := origin[j-1]
				origin[j-1] = origin[j]
				origin[j] = tmp
				//isSorted = true
				//lastExchangeIndex = j
			}
		}
		//sortBorder =lastExchangeIndex
		//if !isSorted{
		//	break
		//}
	}



	fmt.Println(origin)

}


一次优化

package main

import "fmt"



func main()  {
	origin := [...]int{1,223,3,4,34,3545,3,4,23,56,78,89,345,2377,3457,6777}
	fmt.Println(origin)
	//冒泡排序 与调优
	//lastExchangeIndex := 0
	//sortBorder := 0
	for i := 0; i<len(origin);i++{
		fmt.Println(i)
		isSorted := false
		for j := len(origin)-1; j>i;j--{
			if origin[j]<origin[j-1] {
				tmp := origin[j-1]
				origin[j-1] = origin[j]
				origin[j] = tmp
				isSorted = true
				//lastExchangeIndex = j
			}
		}
		//sortBorder =lastExchangeIndex
		if !isSorted{
			break
		}
	}



	fmt.Println(origin)

}

当某一次排列没有发生位置交换时证明已经完成排序

二次调优

package main

import "fmt"



func main()  {
	origin := [...]int{1,223,3,4,34,3545,3,4,23,56,78,89,345,2377,3457,6777}
	fmt.Println(origin)
	//冒泡排序 与调优
	lastExchangeIndex := 0
	sortBorder := 0
	for i := sortBorder; i<len(origin);i++{
		fmt.Println(i)
		isSorted := false
		for j := len(origin)-1; j>i;j--{
			if origin[j]<origin[j-1] {
				tmp := origin[j-1]
				origin[j-1] = origin[j]
				origin[j] = tmp
				isSorted = true
				lastExchangeIndex = j
			}
		}
		sortBorder =lastExchangeIndex
		if !isSorted{
			break
		}
	}



	fmt.Println(origin)

}


在一次调优的基础上记录上一次排列最后一次发生交换的位置,那么之后的位置都是没有发生交换的,所以下一轮交换从上一轮最后一次调优的位置开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值