文章目录
1, 冒泡算法
a06_01_Bubble_basic
package im.bool.a06_sort_algrithm;
public class a06_01_Bubble_basic {
public static void main(String[] args) {
int[] nums = {3, 9, -1, -2, 10};
int temp;
System.out.println("第一次冒泡:");
for (int i=0;i<nums.length-1;i++) {
if (nums[i] > nums[i+1]) {
temp = nums[i];
nums[i] = nums[i + 1];
nums[i+1] = temp;
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + ", ");
}
System.out.println();
System.out.println("第二次冒泡:");
for (int i=0;i<nums.length-1-1;i++) {
if (nums[i] > nums[i+1]) {
temp = nums[i];
nums[i] = nums[i + 1];
nums[i+1] = temp;
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + ", ");
}
System.out.println();
System.out.println("第三次冒泡:");
for (int i=0;i<nums.length-1-2;i++) {
if (nums[i] > nums[i+1]) {
temp = nums[i];
nums[i] = nums[i + 1];
nums[i+1] = temp;
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + ", ");
}
System.out.println();
System.out.println("第四次冒泡");
for (int i=0;i<nums.length-1-3;i++) {
if (nums[i] > nums[i+1]) {
temp = nums[i];
nums[i] = nums[i + 1];
nums[i+1] = temp;
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + ", ");
}
System.out.println();
}
}
a06_02_Bubble
package im.bool.a06_sort_algrithm;
import jdk.internal.org.objectweb.asm.tree.FrameNode;
import java.util.Arrays;
public class a06_02_Bubble {
public static void main(String[] args) {
int[] nums = new int[80000];
for (int i = 0; i < 80000; i++) {
nums[i] = (int) (Math.random() * 80000);
}
long startTime = System.currentTimeMillis();
bubbleSort(nums);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
public static void bubbleSort(int[] nums) {
int temp;
boolean isOrdered = false;
for (int i = 0; i < nums.length-1; i++) {
isOrdered = true;
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
isOrdered = false;
}
}
if (isOrdered) {
System.out.println("第" + (i+1) + "次循环");
System.out.println("已经有序。。。");
break;
}
}
}
}
a06_03
- 如果是向左冒泡,那么左边的边界需要依次变大
- 如果是向右冒泡, 那么右边的边界需要依次变小
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length-1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
public static void bubbleSort_v1(int[] arr){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = temp;
}
}
}
}