/*
冒泡排序和直接插入排序的思想个人感觉很像,都是将待排序序列分为有序序列和无需序列。
只不过冒泡排序每一趟都能确定一个元素的最终位置,而直接插入排序最坏的情况下,最后一次
才能确定。
冒泡排序的思路:一趟排序选择顶端(末端)的一个元素,顺序的和其他的所有元素做比较,直到遇到
有比它大的(小的)就停止,拿这个比较大的元素继续作比较,知道到达末端,本趟排序结束。
若是从顶端(即下标最小的一端)开始,遇到比它大的元素然后交换,那就是下沉法。若是从末端开始,遇到小的
交换是起泡法。还有双向的冒泡排序,就是一趟排序同时确定最大和最小的元素双端冒泡。
时间复杂度方面:最好的情况下是本来就是正序那么需要n次,不需要交换时间复杂为O(n),最坏情况下为逆序,
每次需要和剩余的所有元素作比较,那么就是(n-1)*n/2
*/
/*下沉法*/
public class BubbleSort
{
public static void main(String[]args){
int a[] = {12,5,43,6,2,54,8};
int i,j;
for(i=0;i<7;i++){
j = 1;//刚开始的时候写成了j=i+1,应该是起泡的
while(j<7-i){//每趟排序确定一个最大的元素的位置,因此后面的就不需要比较了
if(a[j-1]>a[j]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
j++;
}
}
for(int k=0;k<7;k++){
System.out.println(a[k]);
}
}//main
}
/*气泡法*/
public class BubbleSort02
{
public static void main(String[]args){
int a[] = {12,5,43,6,2,54,8};
int i,j;
for(i=0;i<7;i++){
j = 6;
while(j>i){
if(a[j]<a[j-1]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
j--;
}
System.out.println(a[j]);//用于观察每次找出的最小的元素
}
for(int k=0;k<7;k++){
System.out.println(a[k]);
}
}//main
}