du blog
Hello, welcome to my blog
排序-9-选择排序
created: Apr 22 21updated: Apr 23 21

回顾冒泡排序

冒泡排序的思想:把每一个元素和下一个元素进行比较交换,使得较大的元素像气泡一样向右移动:

这样一来每一轮操作都可以把最大的元素移动到右侧,经过多轮操作,无序的数列成了升序数列

冒泡排序存在的问题:

元素交换的次数太多了,频繁的数组元素交换意味着更多的内存读写操作,严重影响代码运行效率

选择排序

选择排序的思路:每一轮选择最小者,直接交换到数组最左边

相比较于冒泡排序的优势在于省去了多余的元素交换

执行过程:

代码实现:

1 function sort(arr:Array<number>) { 2 for (let index = 0; index < arr.length - 1; index++) { 3 let minIndx = index; 4 for (let j = index + 1; j < arr.length; j++) { 5 if(arr[j] < arr[minIndx]) { 6 minIndx = j 7 } 8 }; 9 let temp = arr[minIndx]; 10 arr[minIndx] = arr[index]; 11 arr[index] = temp 12 13 } 14 return arr 15 } 16 function main() { 17 const arr = [3, 4, 2, 1, 5, 6, 7, 8, 30, 50, 1, 33, 24, 5, -4, 7, 0]; 18 console.log(sort(arr)) 19 } 20 21 22 main() 23

小结

时间复杂度:O(n2)

空间复杂度:O(1)

不稳定排序算法:

相较于冒泡排序(稳定排序算法),选择排序是不稳定排序算法,示例如下:

摘要总结公众号:程序员小灰 文章