关于冒泡排序:冒泡插入选择排序的分析和总结
1:剖析排序算法的三个维度都是什么?答:执行效率(工夫、空间复杂度),内存耗费,算法稳定性 2:从算法执行效率这个维度登程从哪三个方面进行掂量?答:最好最坏和均匀复杂度、工夫复杂度系数、常数和低阶、比拟和替换、挪动次数。 3:原地排序是什么概念?答:排序时,除带排序元素组内部不占用额定的空间,即为原地排序。 4:什么事排序的稳定性、稳定性排序算法和不稳定性排序算法的区别在哪里?答:对于雷同元素,在排序前后地位不变,即为稳固算法。稳固与不稳固的区别在于雷同元素在排序前后的地位是否变动。 5:数组的满序度、有序度、逆序度概念是什么?如何计算?答:有序度是指有序元素的个数,逆序度是指反序元素对的个数,满序度是指在排序后续元素对的个数,两者之和就是满序度。 6:冒泡排序的实现思路是怎么样的,请实现冒泡排序算法?答:相邻元素进行比拟,有序则不替换,反序则替换,始终到最初一个元素,这样能够保障一个满足条件的元素被挪动到最终地位。下一轮从第二个元素开始,直到倒数第二个元素。代码:BubleSort.go package mainimport ( "fmt")func main() { var arr [5]int = [5]int{1,3,2,5,2} var arrLength = len(arr) for i:=0;i< arrLength;i++ { flag := false // 下一轮从第二个元素开始,直到倒数第二个元素 for j:=1;j<arrLength - 1 -i ;j++ { if(arr[j] > arr[j+1]) { arr[j],arr[j+1] = arr[j+1],arr[j] flag = true } } if(!flag) { break } } fmt.Println(arr)}7:冒泡排序的为什么是原地排序算法,为什么是稳固排序算法,最坏最好,均匀工夫复杂度各是多少?答:不占用额定空间。雷同元素比拟不替换则稳固,替换则不稳固。最好O(N),最坏O(n2),均匀O(N2) 8:插入排序的实现思路是怎么样的,请实现插入排序算法?答:将待排序元素组分成排序区和未排序区,将未排序区元素一次插入已排序区,并保障已排序区始终有序,晓得未排序区为空InsertSort.go package mainimport "fmt"func main() { arr := [5]int{5,4,3,2,1} arrLength := len(arr) for i:= 1;i< arrLength;i++ { tempValue := arr[i] j := i - 1 for ;j>=0;j-- { // 和曾经排序的做比拟 if(arr[j] > tempValue) { //右边大于左边 arr[j+1] = arr[j] // 则右移 } } arr[j+1] = tempValue } fmt.Println(arr)}9:插入排序为什么是原地排序算法,最好最坏,均匀复杂度各是多少?答:未应用额定空间排序。最好O(n),均匀O(n2) ...