简单的三大排序算法选择
前面系列文章
插入排序: https://www.cnblogs.com/gdouzz/p/10759390.html
选择排序: https://www.cnblogs.com/gdouzz/p/10759239.html
冒泡排序: https://www.cnblogs.com/gdouzz/p/10720451.html
(二)个人总结
1、选择排序和冒泡排序比较
选择排序和冒泡排序的比较,选择排序的时间复杂度,不论最好最坏都是o(n²),是因为比较次数的原因,但它的交换次数是比冒泡排序要少的,所以在某些情况下,可能会比冒泡排序快一点。冒泡排序因为交换次数的问题,在平时的编程中基本也不会用到。但是相对来说,出场率要比选择排序高。
2、为什么说插入排序会比冒泡排序好
//插入排序//if (tempValue < arr[k]) //{ // arr[k + 1] = arr[k]; //} //else //{ // break; //} //上面插入排序,只需要一次赋值操作, // if (arr[j] > arr[j + 1]) // { // var temp = arr[j]; // arr[j] = arr[j + 1]; // arr[j + 1] = temp; // } //下面表面看都已经3次赋值了,并且交换操作对CPU不友好。
//为啥说,交换操作对CPU不友好呢,我们CPU的从内存里面加载数据的时候,一般是整块来加载的 //就是说会把相邻的数据都一块读到寄存器中(缓存中)。 //如果你是交换的话,当你一个数组非常庞大,假设第10项要和第10000项,一个在CPU的寄存器中, //一部分在内存或者外存,这里就会多一层时间消耗。
插入排序和选择排序比较,不用比较了。
总结:这三种简单的排序算法当中,如果要推荐,应该要优先使用插入排序,效率会更高。还有在日常编程中,冒泡排序和选择排序,几乎很少用到(如果在数据量很小的排序当中,这几个算法也不会有太大的区别,调用次数多了,才会稍微有点区别),对于我们程序员来说,应该要追求更高效的做法(在插入,冒泡,选择)中,做出合适的选择。
终极目标:世界大同