【简单算法】冒泡排序--真的很简单!
mao
冒
pao
泡
pai
排
xu
序
01 |
都有什么排序方法? |
02 |
冒泡排序介绍 |
冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的大小比较结果不符合要求就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故而得名冒泡排序。
03 |
算法详解(Java) |
首先新建一个int类型的数组;
public class BubbleSort {
public static void main(String[] args) {
int[] x = {1,5,8,4,6,13,66,100,22,73};
}
}
如何交换两个数字位置?
要循环多少次?
int temp = 0;
int i = 1;
int y = 2;
temp = i;
i = y;
y = temp;
可是感觉有点繁琐的样子,那么能不能不要新建变量从而达到交换的目的呢?答案是可以的!
朋友们可以带入进去算一下,并稍微理解思考一段时间,相信你们会很容易的理解。
int a = 1;
int b = 2;
a = a + b;
b = a - b;
a = a - b;
我们发现,每当将最大的移动到最后,便是一个大的循环,那么我们仔细想一下,如果一共有10个数字需要排序,总共需要多少次的大循环呢?答案是9次即可,第一次我们可以找出最大的数字,放置最后,第二次可以找出第二大的数字放置倒数第二位置上,依次下去,直到第9次,排出第二小的数字放置在了第二个位置上,此时还剩一个最小的数字,也没有必要排序了。因此大循环需要9次。通过以下代码可以完成:
for (int i = 0; i < arrays.length-1; i++){
//执行代码
}
for (int i = 0; i < arrays.length-1; i++) {
for (int j = 0; j < arrays.length-1-i; j++) {
if(arrays[ j ] > arrays[ j+1 ]){
arrays[ j ] = arrays[ j ] + arrays[ j + 1];
arrays[ j+1 ] = arrays[ j ] - arrays[ j + 1];
arrays[ j ] = arrays[ j ] - arrays[ j + 1];
}
}
}
完整代码以及结果:
public class BubbleSort {
public static void main(String[] args) {
int[] arrays ={1,5,8,4,6,13,66,100,22,73};
for (int i = 0; i < arrays.length-1; i++) {
for (int j = 0; j < arrays.length-1-i; j++) {
if(arrays[j]>arrays[j+1]){
arrays[ j ] = arrays[ j ] + arrays[ j + 1];
arrays[ j+1 ] = arrays[ j ] - arrays[ j + 1];
arrays[ j ] = arrays[ j ] - arrays[ j + 1];
}
}
}
for(int i : arrays){
System.out.println(i);
}
}
}
希望各位读者能有所获益
编辑|zah
审核|zah