1.冒泡排序
基本思想:依次比较相邻元素,若前面的大于后面的就交换元素,在一次迭代中将最大的元素“沉降”到最后的位置,经过n-1次迭代即可完成排序目的。
public static void bubbleSort(int[] data) {
for(int i=0;i<data.length-1;i++) {
boolean Bfinished=true;//排序完成标志位
for(int j=0;j<data.length-1-i;j++) {
if(data[j]>data[j+1]) {
change(data,j,j+1);
Bfinished=false;
}
}
if(Bfinished) {
break;
}
}
}
上述代码是优化后的冒泡排序,我们知道在一次迭代中,若一次交换都没发生,就可以证明排序已经完成,不需要再进行后面的迭代了。
2.选择排序
基本思想:将序列划分为有序部分和无序部分(有序部分在前),有序部分初始长度=0.依次从无序部分找到最小值放到有序部分的最后一位,有序部分长度++,无序部分长度--。最终使得有序部分长度=n,无序长度=0。
public static void selectSort(int[] data) {
for(int i=0;i<data.length;i++) {
int indexofMin=i;
for(int j=i+1;j<data.length;j++) {
if(data[j]<data[indexofMin]) {
indexofMin=j;
}
}
change(data,i,indexofMin);
}
}
3.插入排序
基本思想:与选择排序相类似,将序列也分为有序部分+无序部分。与选择排序不同的是insertsort()是从无序部分依次取出插入到有序部分。
public static void insertSort(int[] data) {
for(int i=1;i<data.length;i++) {//第i轮,表示把data【i】插入到前i-1的有序序列中
int j=0;
int temp=data[i];
for(j=i;j>0&&data[j-1]>temp;j--) {
//依次遍历i之前的元素,若之前的元素大于该元素,就把该元素往后移一位
data[j]=data[j-1];
}
data[j]=temp;
}
}