1. 冒泡排序(含两种实现方式)
基本思路:比较相邻两个元素的大小,将数值大的放在左边。
跑第一趟 假如下标为0的元素比下标为1的元素的值要大,两元素进行交换,将大的交换到左边
然后再用下标为1的与下标为2比较,就这样两相邻元素依次进行比较,将较大的放在左边。
重复第一趟步骤直到排序完成。
下面我们来模拟一下冒泡排序假设有数组{35,56,34,22,16}
第一趟排序:
第一次排序:35和56比较,56更大这里我们什么都别管 顺序为:35,56,34,22,16
第二次排序:56和34比较,56更大我们让56和34交换 顺序:35,34,56,22,16
第三次排序: 56和22比较,56更大,交换位置 顺序:35,34,22,56,16
第四次排序: 56比16比较,56更大,交换位置 顺序: 35,34,22,16,56
第一趟比较了四次
第二趟排序:
第一次排序:35和34比较,35更大,交换位置 顺序:34,35,22,16,56
第二次排序:35和22比较,35更大,交换位置 顺序:34,22,35,16,56
第三次排序:35和16比较,35更大,交换位置 顺序:34,22,16,35,56
第二趟比较了三次
第三趟排序:
第一次排序:34和22比较,34更大,交换位置 顺序:22,34,16,35,56
第二次排序:34和16比较,34更大,交换位置 顺序:22,16,34,35,56
第三趟比较了两次
第四趟排序:
第一次排序:22和16比较,22更大,交换位置 顺序:16,22,34,35,56
第四趟比较了一次
最终顺序:16,22,34,35,56
由此可见假设有N个元素,要跑N-1趟,每i趟要比较N-i次,所以可用双重循环,外层控制走的趟数,内层负责比较的次数
附上代码:
public class Bubblesort1{
public static void main(String[] args) {
int temp;
int a[]=new int[] {35,56,34,22,16};
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}
public class Bubblesort2 {
/*冒泡2*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int temp;
int a[]=new int[] {35,56,34,22,16,45,66,33};
for(int i=0;i<a.length-1;i++) {
for(int j=a.length-1;j>0;j--) {
if(a[j]<a[j-1]) {
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}