冒泡优化

代码

废话少说,先上代码:

System.out.print("排序前:");
		for(int i=0;i<N;i++){
			a[i] = (int)(Math.random()*1000);
			System.out.print(a[i]+" ");
		}
		System.out.println();
		for(int i=0;i<N-1;i++){
			int minIndex = i;
			for(int j = i;j<N-i-1;j++){
				//最大的向后跑
				if(a[j]>a[j+1]){
					int temp = a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
				//找最小的数和a[i]换
				if(a[minIndex] > a[j]){
					minIndex = j;
				}
			}
			int temp = a[minIndex];
			a[minIndex]=a[i];
			a[i]=temp;
		}
		System.out.print("排序后:");
		for(int i=0;i<N;i++){
			System.out.print(a[i]+" ");
		}

思路

上一篇说了经典冒泡的算法和实现,这里我对冒泡进行了少许的优化,我们知道冒泡是对直接排序的一种优化,他减少了循环的次数,减少了时间复杂度。那我们能不能更进一步的减少循环次数呢?
这里的思路是在冒泡的同时,找出每一次冒泡过程中的最小值,在内循环结束时,将最小值和第一个数交换。

            if(a[minIndex] > a[j]){
					minIndex = j;
				}
			}
			int temp = a[minIndex];
			a[minIndex]=a[i];
			a[i]=temp;

这样就简单的完成了一次优化。欢迎大佬纠错和further优化。

对比:

经典冒泡:

    for(int i = 0;i<a.length-1;i++){
	    for(int j=0;j<a.length-i-1;j++){
	    }
	}

优化冒泡:

    for(int i=0;i<N-1;i++){
	    for(int j = i;j<N-i-1;j++){
	    }
	}

去别仅仅发生在内循的int j之上。这就可以看出循环的次数减少了。

原创文章 5 获赞 13 访问量 163

猜你喜欢

转载自blog.csdn.net/leno_scholar/article/details/105813827