正宗的冒泡思路:(从大到小排列:将小数往下冒)
第一个数和第二个数比较,然后将小的一个数往后面挪,知道挪到最后一位,就得到了第一个最小的数了。将小数往下冒。
关键的是想清楚两次循环的次数,还有中间重复的次数。
/**
* 将数组从大到小排序:
* 5 7 2 9 1 8 3 2 0 6 4
* 第1次:a[0]<a[1]交换
* 7 5 2 9 1 8 3 2 0 6 4
* 第2次:a[1]<a[2]不交换
* 7 5 2 9 1 8 3 2 0 6 4
* 第3次:a[2]<a[3]交换
* 7 5 9 2 1 8 3 2 0 6 4
* 第4次:a[3]<a[4]不交换
* 7 5 9 2 1 8 3 2 0 6 4
* 第5次:a[4]<a[5]交换
* 7 5 9 2 8 1 3 2 0 6 4
* 第6次:a[5]<a[6]交换
* 7 5 9 2 8 3 1 2 0 6 4
* 第7次:a[6]<a[7]交换
* 7 5 9 2 8 3 2 1 0 6 4
* 第8次:a[7]<a[8]不交换
* 7 5 9 2 8 3 2 1 0 6 4
* 第9次:a[8]<a[9]交换
* 7 5 9 2 8 3 2 1 6 0 4
* 第10次:a[9]<a[10]交换
* 7 5 9 2 8 3 2 1 6 4 0
* */
public void test7() {
int[] a = { 5, 7, 2, 9, 1, 8, 3, 2, 0, 6, 4 };
for (int n = 0; n < a.length - 1; n++) {
for (int i = 0; i < a.length - 1 - n; i++) {
if (a[i] < a[i - 1]) {
a[i] = a[i] + a[i - 1];
a[i - 1] = a[i] - a[i - 1];
a[i] = a[i] - a[i - 1];
}
}
}
}
我的冒泡思路:(从大到小排列:将大数往上冒)
第一个数依次和后面的每个数比较,然后将大的数放在第一个数的位置。直接将大数冒上来。
我自己的冒泡思路核心代码:
/**
* 将给定数组(4,2,20,7,1,9,3)从大到小排序
* */
public void test5(){
int[] a={4,2,20,7,1,9,3};
System.out.println("排列前的数组:");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]<a[j]){
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
}
}
网友评论