数据结构之排序总结
2019-11-04 本文已影响0人
洛珎
1.冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
eg:数组[1,5,2,3,4],升序排序
思路:两层遍历,比较相邻两个元素比较大小,使大的(或小的)数往数组头部排。
首先从数字最后一个数开始,比较相邻两个数的大小,如果前面的数比它小,交换位置,这样遍历一轮下来就把最大的书排在了index=0的位置,即5;接下来继续上面的做法,就把第二大的数排在了index=1的位置;依次下去直到完成数组的排序;
时间复杂度:为n方;最快是数组正序的时候;最慢是数组倒序的时候,比如升序对应的降序
2.选择排序
3.插入排序
4.归并排序
eg:数组[7,2,4,6]升序
思路:先将数组平均分成两份数组,再继续平分,直到每个数组的长度为1;
再有序地合并,比如arr1=[2,7],arr2=[4,6],先拿arr1的首元素2与arr2的首元素相比较,2<4,小的取出来加入返回的新数组temp,即2,并且小的数组向后移动一个位置,拿7和4比较,7>4,取出4加入temp,即[2,4],重复直到完成排序
5.快速排序
eg:[2,3,4,1,5,6]升序
思路:首先取基准数,这里取数组第一个数,右指针从右向左扫描,碰到第一个小于基准数的时候停住,左指针从左向右扫描,碰到第一个大于基准数的时候停住;
交换左右指针所停位置的数,最后交换基准数与指针相遇位置的数;
递归