冒泡排序
基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将少数放前,大数放后.然后比较第2个和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后..至此第一趟结束,将最大的数放到了最后.在第二趟:仍从第一对数开始比较(因为可能由于第2个和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大的数(其实在整个数列中是第二大的数).如此与此下去,重复以上过程,直至最终完成排序.
举例说明:
初始状态: a={49,38,65,97,76,13,27,49}
\ /
第一次比较: 49>38,两个数进行交换
a={38,49,65,97,76,13,27,49}
\ /
第二次比较: 49<65,不进行交换
a={38,49,65,97,76,13,27,49}
\ /
第三次比较: 65<97,不进行交换
a={38,49,65,97,76,13,27,49}
\ /
第四次比较: 97>76,两个数进行交换
a={38,49,65,76,97,13,27,49}
\ /
第五次比较: 97>13,两个数进行交换
a={38,49,65,76,13,97,27,49}
\ /
第六次比较: 97>27,两个数进行交换
a={38,49,65,76,13,27,97,49}
\ /
第七次比较: 97>49,两个数进行交换
a={38,49,65,76,13,27,49,97}
至此,第一趟排序结束,找出了最大值放在倒数第一的位置.如此重复,找出倒数第二、第三、.....、最小值,并分别放在倒数第二、第三、......、第一个位置.
Java代码:
int[] a = {49,38,65,97,76,13,27,49};
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
System.out.println("\n");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}