ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
初级排序算法(选择,冒泡,插入,希尔) === ### 选择排序 1. 找到数组中最小的那个元素 2. 将它和数组第一个元素交换位置(如果第一个元素就是最小元素,那末它就和自己交换) 3. 在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置 4. 如此往复,直到整个数组排序完成 - 运行时间和输入无关 - 数据移动是最少的 - 时间复杂度O(n^2) - 空间复杂度O(1) ~~~ func TestOne(t *testing.T) { rand.Seed(time.Now().UnixNano()) data := []int{} for i:=0;i<10;i++{ intn := rand.Intn(999) data = append(data, intn) } fmt.Println(data) len := len(data) //end := len - 1 s := 0 for s<len{ min := data[s] st := s for ;st<len;st++{ if data[st] < min { min,data[st] = data[st],min } } data[s] = min s += 1 // 每移动一遍 就向前推动一格 } fmt.Println(data) } ~~~ ### 冒泡排序 1. 比较相邻的元素.如果第一个比第二个大,就交换他们两个 2. 对每一个相邻元素作同样的工作,从开始第一对到结尾最后一对.这步作完后,最后的元素会是最大的数 3. 针对所有元素重复以上步骤,除了最后一个 4. 持续每次对越少的元素重复上面的步骤,直到没有任何一对数字需要比较 ~~~ func main() { data := make([]int,10) rand.Seed(time.Now().UnixNano()) for i:=range data{ data[i] = rand.Intn(999) } fmt.Println(data) Asort(data) } func Asort(data []int) { for i:=range data{ for j:=1;j<len(data)-i;j++{ if data[j] < data[j-1] { data[j],data[j-1] = data[j-1],data[j] } } } fmt.Println(data) } ~~~ ### 插入排序 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中,从后向前扫描 3. 如果该元素(已排序)大于新元素,将该元素移到下一位置 4. 重复步骤三,直到找到以排序的元素下雨或者等于新元素的位置 5. 将新元素插入到该位置后 6. 重复步骤2~5 ~~~ func TestCRPX(t *testing.T) { data := make([]int,10) rand.Seed(time.Now().UnixNano()) for i:=range data{ data[i] = rand.Intn(999) } fmt.Println(data) // 插入排序 for i:=range data { for j:=i;j>0;j--{ if data[j]<data[j-1] { data[j],data[j-1] = data[j-1],data[j] } } } fmt.Println(data) } ~~~