冒泡排序:从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾(需要比较元素的个数减一),此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。时间复杂度为O(n2)
快速排序:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
package studuy.ecs;
// 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,
//其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,
//整个排序过程可以递归进行,以此达到整个数据变成有序序列。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(n*log2n)。
public class Kspx {
public static void quicksort(int a[],int left,int right){
if(left>=right){
return;
}
int i = left;
int j = right;
int temp = a[left]; //选取第一个数(这里也可选其他的数)作为比较的基石
while(i<j)
{
while(j>i&&a[j]>=temp){
j--;
}
if(j>i){
a[i++]=a[j];
}
while(j>i&&a[i]<=temp){
i++;
}
if(j>i){
a[j--]=a[i];
}
}
a[i]=temp;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
插入排序:插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。
选择排序: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。与冒泡排序相比,两者的比较次数是相同的,但是选择排序交换的次数少于冒泡排序,提升了排序的效率。时间复杂度为O(n2)