选择排序是将排序无序数据集中的目的数据选择性的放入指定位置,即交换数据的位置
func SelectSortStrings(array []string) []string {
if len(array) <= 1 {
return array
} else {
for i := 0; i < len(array)-1; i++ { //最后一个元素不需要选择
min := i //最小值的下标
for j := i + 1; j < len(array); j++ {
if strings.Compare(array[i], array[j]) > 0 { //字符串比较的标准方法
min = j // 保存最小值的下标
}
}
if i != min {
array[i], array[min] = array[min], array[i] //后面有更大的数 进行交换
}
}
}
return array
}
冒泡排序就是将数据往后或是向前移动,达到指定的顺序
func BubbleSort(array []int) []int {
length := len(array)
if length <= 1 {
return array
} else {
for i := 0; i < length-1; i++ { //最后一个元素不需要冒泡
// 算法改进
isneedchange := false //是否需要交换
for j := 0; j < length-1-i; j++ {
if array[j] > array[j+1] {
array[j], array[j+1] = array[j+1], array[j]
isneedchange = true
}
}
if !isneedchange {
break
}
fmt.Println(array)
}
return array
}
}
// 插入排序
// 从乱序数据集中选取一个合适的目标值插入到有序数据集中去
func InsertSort(array []int) []int {
length := len(array)
if length <= 1 {
return array
} else {
// 从数组的最后面进行数据的选择排序
// for i := length - 2; i >= 0; i-- { //跳过第一个,认为只包含一个元素的数据集是有序的
// backup := array[i] //备份插入的数据
// j := i + 1
// for j <= length-1 && backup > array[j] {
// array[j-1] = array[j] //将数据从后往前移动
// j++
// }
// array[j-1] = backup
// fmt.Println(array)
// }
// 从数组的最前面进行数组的选择排序
for i := 1; i < length; i++ {
backup := array[i]
j := i - 1
for i >= 0 && backup < array[j] {
array[j+1] = array[j]
j--
}
array[j+1] = backup
}
return array
}
}