冒泡排序
算法讲解:
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
用自己的话来说呢,就是先取一个数组的元素,当然了要从头开始取设为i,然后再取一个元素,第二个与元素可以从头开始取.但是呢, 这样的话就会取到2个相同位置的值了,就没有意义在做比较l,所以取(j)的元素 这里的i指的是索引 (index) .然后比较它们的值大小, j的初始值为i+1;
如果存在数组 arr[i] > arr[j] 那么就发生值的交换
for (int j = i+1; j <arr.length ; j++) {
// 第二次for循环从i+1 开始,
int temp=0;
// 如果存在 arr[j]<arr[i] 就例如 arr[3] < arr[0]
// 那么这两个值就会发生交换.小的值交换到[0].大的交换到[3]
// 诸如此类 ,一直循环,知道,没有存在后面的所有值都大于前面的
if (arr[j]<arr[i]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
没有就继续循环,直到这一轮结束都没有比arr[i]<arr[j],那么就确定了,arr[i]是数组中最小的值,放在前面,就在动它了.那么此时,我们就要继续选择下一个值[i+1]进行与后面的值进行比对.重复上面的操作.
// 这句可以不看
package Function;
import java.util.Arrays;
// 冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int [] array = {1,3,5,67,2,6,0,12,3};
Bubble(array);
}
// 使用两次for循环
public static void Bubble(int[] arr){
for (int i = 0; i < arr.length ; i++) {
// 第一次for循环 从0开始
for (int j = i+1; j <arr.length ; j++) {
// 第二次for循环从i+1 开始,
int temp=0;
// 如果存在 arr[j]<arr[i] 就例如 arr[3] < arr[0]
// 那么这两个值就会发生交换.小的值交换到[0].大的交换到[3]
// 诸如此类 ,一直循环,知道,没有存在后面的所有值都大于前面的
if (arr[j]<arr[i]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
这种是没有自己写方法的,直接写在mian 里面的.其实两者写法差不多.调用方法的话相对好一些吧.必经也可以写一些重载啊什么的.不知道没关系,后面也会有更新的.
public class BubbleSort {
public static void main(String[] args) {
int [] array = {1,3,5,67,2,6,0,12,3};
for (int i = 0; i < array.length ; i++) {
// 第一次for循环 从0开始
for (int j = i+1; j <array.length ; j++) {
// 第二次for循环从i+1 开始,
int temp=0;
// 如果存在 arr[j]<arr[i] 就例如 arr[3] < arr[0]
// 那么这两个值就会发生交换.小的值交换到[0].大的交换到[3]
// 诸如此类 ,一直循环,知道,没有存在后面的所有值都大于前面的
if (array[j]<array[i]){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
总的来说,冒泡排序嘛,理解算法的思路就好了,当自己想不明白的时候,就动手去写,总在脑子里想万一漏了别的地方怎么办嘞,是吧.我自己写的可能不是最好的.解释的方式也有不太官方.但自己能理解就好了.重要的是 用自己话说出来,让大部分人能够明白.这样你才算是真正将这个知识点掌握了.
以上所有内容除了第一段冒泡算法讲解以外,均为自己的总结.希望大家也加油吧.