选择排序
常见排序方法:
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
1.冒泡排序
冒泡排序的(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。
因为排序的过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序
,因此要在排序过程中设置一个flag判断元素是否进行过交换。从而减少不必要的比较。
//在数组章节
2.选择排序
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。
- 选择排序思想:
选择排序(select sorting) 也是一种简单的比较方法。它的基本思想是:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换;
第二次从R[1]~R[n-1]中选取最小值,与R[1]交换;
第三次从R[2]~R[n-1]中选取最小值,与R[2]交换;......
第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,....
第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,
总共通过n-1次,得到一个按顺序码从小到达排列的有序序列。
选择排序应用实例:
package main
import (
"fmt"
)
//编写函数selectSort,完成排序;
func SelectSort(arr *[6]int) {
//标准的访问方式
// (*arr)[1] = 600 <==> arr[1] = 600,编译器底层优化的功劳;
// arr[1] = 600
//1.先完成将第一个最大值和arr[0] ==> 先易后难;
//假设 arr[0] 就是最大值;
for j := 0; j < len(arr)-1; j++ {
max := arr[j]
maxIndex := j
//遍历后面,1---[len(arr)-1] 比较;
for i := j + 1; i < len(arr); i++ {
if max < arr[i] { //找到真真的最大值
max = arr[i]
maxIndex = i
}
}
//交换:
if maxIndex != j {
arr[j], arr[maxIndex] = arr[maxIndex], arr[j]
}
fmt.Printf("第%d次循环:%v\n", j+1, *arr)
}
}
func main() {
//定义一个数组,从大到小排序
arr := [6]int{10, 34, 19, 100, 80, 789}
fmt.Println("排序前:", arr)
SelectSort(&arr)
fmt.Println("排序后:", arr)
}