本文详细介绍了十大排序算法,包括算法的思路,代码以及特点
如果你觉得对你有帮助,记得双击屏幕哦~
小伙伴们好~ 我想大家学习算法之旅的开端就是各种排序算法吧,的确,排序算法广泛的应用性以及它的简洁基础等性质是初学者的不二之选,那今天我就带着你复习回顾以下各种经典的排序算法吧!希望对你有所帮助!我们的约定:本文所有排序算法操作对象为整数数组,顺序为从小到大
以下是本文的大纲,冒泡排序被无情地挡住了 ~
1.冒泡排序
冒泡排序,顾名思义,就是数据像一个个气泡似的不断地往上冒。大致思路是 : 我们对给定的一个数组,进行n轮冒泡操作,每次操作分别比较相邻两项,如果前一项大于后一项,就将它们交换位置,你可以想象一下这个情景,经过n次比较(如果有必要就进行交换),最终的结果肯定是最大的那一项被移动到数组的最右端;那我们重复这个过程,经过n次冒泡操作,就将全部的数据进行了排序,这就是冒泡排序的思路。
但是我们可以进行一些优化,比如我定义一个名为flag的变量监测一轮冒泡操作中交换元素的次数,如果某次冒泡操作中元素交换的次数为0,那也就意味着所有元素已经完成了排序,我们就可以终止排序结束程序了。
具体的代码如下:
//冒泡排序,a为数组,n为数组的长度
public static void bobbleSort(int a[],int n){
if(n<=1) return;
for(int i=0;i
//提前退出冒泡排序的标志
boolean flag=false;
for(int j=1;j
if(a[j]
int tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;//交换元素
flag=true;
}
}
if(flag==false) break;//如果没有元素交换,则已经有序,结束
}
}
冒泡排序的特性最好时间复杂度为 O(n) ,这时对应着数组已经是有序的了,只需要一次冒泡操作;最坏时间复杂度为 O(n^2) ,进行 n 次冒泡操作才能完成最终的排序 ;空间复杂度为 O(1) ,是一个原地排序算法
冒泡排序是一个稳定的排序算法,因为我们可以控制如果两个元素相等,就不进行交换,这就保证了它的稳定性 (这里的稳定性是指,排序算法不改变相等元素在数组中的先后位置,也就是a==b,在数组中a的位置比b的位置靠前,那么排序后a的位置仍然靠前,也就是排序不改变它们的相对位置)
冒泡排序所需要的交换操作次数和数组中的逆序度相等
2.选择排序
选择排序的思想是非常简单的,过程如下:首先通过扫描数组找到其中最小的元素,然后将它与第一个元素交换(如果第一个元素就是最小元素的话那么它就和自己交换)
在剩下的数组中找到最小的元素,然后将它与第二个元素交换
如此反复n-1次,就达到了排序的效果
具体的代码如下:
public static void selectSort(int[] a,int n){
for(int i=0;i
int min=i;//min是最小元素的下标
//寻找i--n之间最小的元素
for(int j=i;j
if(a[j]