狂神说版)"/>
冒泡排序-优化(狂神说版)
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.运行结果
写在最后
人生就像一本书,傻瓜们走马看花似地随手翻阅它,聪明的人用心地阅读它。因为他知道这本书只能读一次。——保罗
更多推荐
冒泡排序-优化(狂神说版)
发布评论