从学习数据结构开始就接触各种算法基础,但是自从应付完考试之后就再也没有练习过,当在开发的时候也是什么时候使用什么时候去查一下,现在在学习JavaScript,趁这个时间再把各种基础算法整理一遍,分别以JS和PHP语法的方式编写代码。
1.冒泡排序
原理:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束
时间复杂度:平均情况:O(n2) 最好情况:O(n) 最坏情况:O(n2)
空间复杂度:O(1)
稳定性:稳定
//JavaScript语法 var array = [23,0,32,45,56,75,43,0,34]; for(var i = 0; i < array.length; i++) { var isSort = true; for(var j = 0; j < array.length - 1 - i; j++) { if(array[j] > array[j+1]) { isSort = false; var temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } if(isSort) { break; } } console.log(array);
<?php $array = [23,0,32,45,56,75,43,0,34]; for($i = 0; $i < count($array); $i++) { $isSort = true; for($j = 0; $j < count($array) - 1; $j++) { if($array[$j] > $array[$j+1]) { $isSort = false; $temp = $array[$j]; $array[$j] = $array[$j + 1]; $array[$j + 1] = $temp; } } if($isSort) { break; } } var_dump($array);?>
2.简单选择排序
原理:通过n-i次关键字之间的比较,从n-i+1 个记录中选择关键字最小的记录,并和第i(1<=i<=n)个记录交换 简单选择排序的性能要略优于冒泡排序
时间复杂度:平均情况:O(n2) 最好情况:O(n) 最坏情况:O(n2)
空间复杂度:O(1)
稳定性:不稳定
//JavaScript var array = [23,0,32,45,56,75,43,0,34]; for(var i = 0; i < array.length - 1; i++) { var pos = i; for(var j = i + 1; j < array.length;j++) { if(array[j] < array[pos]) { pos=j; } } var temp=array[i]; array[i]=array[pos]; array[pos]=temp; } console.log(array);
<?php $array = [23,0,32,45,56,75,43,0,34]; for($i = 0; $i < count($array); $i++) { $pos = $i; for($j = $i + 1;$j < count($array); $j++) { if($array[$j] < $array[$pos]) { $pos = $j; } } $temp = $array[$i]; $array[$i] = $array[$pos]; $array[$pos] = $temp; } var_dump($array);?>
3.直接插入排序
原理:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 比冒泡法和选择排序的性能要更好一些
新闻热点
疑难解答
图片精选