197
社区成员
发帖
与我相关
我的任务
分享
上一篇知道了冒泡排序,现在通过冒泡排序来求数组的逆序数。何为逆序数:
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数
逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。 如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。
那逆序数的方法通过冒泡来实现就很简单了,也是两个循环,里面循环是第一轮从一个元素与后面元素一个一个比较,如果比后面的大就加1做个计数,第二轮从第二个元素与后面元素分别一一的去比较,一直这样循环完毕,就把逆序数找出来了
package main
import "fmt"
func bubbleSort(arr []int) int {
cnt := 0
len := len(arr) - 1
for i := 0; i < len; i++ {
for j := i; j < len; j++ {
if arr[i] > arr[j+1] {
cnt = cnt + 1
}
}
}
return cnt
}
func main() {
arr := []int{5, 3, 6, 2, 1, 4}
arr2 := bubbleSort(arr)
fmt.Printf("%v的逆序数:%v\n", arr, arr2)
}
[5 3 6 2 1 4]的逆序数:10