1.思路:
冒泡排序:比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置。
2.做法
2.1定义冒泡排序的方法
我们要知道给数组排序那么返回值就一定是一个数组,方法名就取sort
排序。参数我们要对谁做什么,对数组进行排序,参数自然就是数组。
public static int[] sort(int[] array) {}
于此同时还需要定义一个中间变量来作为交换位置的媒介。
int temp;
2.2.循环
比较两个数的大小不止一次比较,多次就一定会用到循环,那就一定要想到for
循环,至于为什么要用for循环就不得而知了,for循环还需要用到两次,为什么要用到两次?因为第一次是用来判断我们要走多少次循环,而且循环的次数一定要是数组长度减去一个1;即array.length - 1
。有人又问为啥要减去一个一,因为不减去一个1就会数组下标越界的错误。
内层循环才是真正的比较;这里的array.length - 1 - i
是表示比较的次数不断减少,需要再减去一个i,因为每一次遍历都会得出一个最大的数字。
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j + 1] > array[j]) { // 如果比较数组中第二个数比第二个数比第一个数大。
temp = array[j]; // 则先把前一位数和temp 交换位置。
array[j] = array[j + 1];// 再把后一位和前一位交换位置。
array[j + 1] = temp;// 最后把temp放回原来的位置。
flag = true;
}
交换完成把这个数组返回出去就好了。
return array;
2.3.Main方法
要对数组排序首先要有数组,这个步骤可以在写好排序方法之后再定义,定义一个数组长度为19的名字为a数组。接着调用sort
数组冒泡排序方法,把需要对排序的数组传进去,返回一个变量也叫sort
。最后通过Arrays
类中的toString方法把数组显示出来不然只会出现一串数字。
public static void main(String[] args) {
int[] a = {2, 3, 1, 8, 6, 2, 7, 10, 20, 100, 200, 50, 60, 10, 205, 625, 165, 325, 845}; // 定义一个数组。
int[] sort = sort(a); // 调用sort排序的方法,然后把需要排序的数组名字‘a’传进去。
System.out.println(Arrays.toString(sort)); // 使用Arrays类中的toString方法把数组显示出来不然只会出现一串数字。
}
3.源代码
import java.util.Arrays;
public class Main {
/*
1.冒泡排序:比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们位置。
2.每一次比较,都会产生出一个最大,或者最小的数数。
3.下一轮则可以少一次排序。
4.一次循环,直到结束!
*/
public static void main(String[] args) {
int[] a = {2, 3, 1, 8, 6, 2, 7, 10, 20, 100, 200, 50, 60, 10, 205, 625, 165, 325, 845}; // 定义一个数组。
int[] sort = sort(a); // 调用sort排序的方法,然后把需要排序的数组名字‘a’传进去。
System.out.println(Arrays.toString(sort)); // 使用Arrays类中的toString方法把数组显示出来不然只会出现一串数字。
}
public static int[] sort(int[] array) {
// 定义一个临时变量作为交换位置的中间变量。
int temp;
// 外层循环,判断我们这个要走多少次。
for (int i = 0; i < array.length - 1; i++) {
boolean flag = false; // 通过flag标志位减少没有意义的比较。
// 内层循环,比价判断这两个数,如果一个数比第二个数大,则交换位置。
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j + 1] > array[j]) { // 如果比较数组中第二个数比第二个数比第一个数大。
temp = array[j]; // 则先把前一位数和temp 交换位置。
array[j] = array[j + 1];// 再把后一位和前一位交换位置。
array[j + 1] = temp;// 最后把temp放回原来的位置。
flag = true;
}
}
// 如果没有进行比较的话,咱们就进行结束了。
if (flag == false) {
// 退出可,跳出循环,最后一轮就不用走了,这样也是可以降低时间成本的。
break; // break ,跳出内层循环。
}
}
return array; // 最后把这个数组给返回出去。
}
}
4.运行结果
写在最后
人生就像一本书,傻瓜们走马看花似地随手翻阅它,聪明的人用心地阅读它。因为他知道这本书只能读一次。——保罗